У меня есть сервер, который прослушивает подключения из SWF-файла в браузере.C# Многопоточный сервер - перекрестная политика домена
При работе на местном, он поднимает соединение затем падает очень скоро после выхода в журнале:
[31/1/2016 18:10:14] 127.0.0.1connected. Полный 127.0.0.1:58482
[31/1/2016 18:10:14] Got < политики файл-запрос /> от клиента 0
[31/1/2016 18:10:16] Client0 отключен и удален.
Это не регистрируется при запуске сервера и запуске клиента в режиме отладки в flashdevelop, но клиент подключается и действует по желанию.
Я включаю в себя мой класс TcpClient, допустил ли я ошибку или опечатку или должен ли он вести себя по-другому, когда бежал в браузере, а не в flashdevelop?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ParticleFramework.Communication
{
class TcpClient
{
#region Required Variables
public Socket socket;
public int index;
private byte[] dataBuffer = new byte[0x400];
private AsyncCallback ReceiveCallback;
private AsyncCallback SendCallback;
#endregion
#region ArchiCruise Vars
public ArchiCruise.Users.UserObject userObject;
public string ip;
#endregion
public TcpClient(Socket sock, int num)
{
index = num;
socket = sock;
ip = socket.RemoteEndPoint.ToString().Split(new char[] { ':' })[0];
ReceiveCallback = new AsyncCallback(this.ReceivedData);
SendCallback = new AsyncCallback(this.sentData);
this.WaitForData();
}
public void Disconnect()
{
if (socket.Connected)
{
socket.Close();
if (userObject != null) userObject.remove();
Particle.Server.removeClient(this);
Log.Info("Client" + this.index + " disconnected and removed.");
Console.WriteLine("Client" + this.index + " disconnected.");
}
}
private void ReceivedData(IAsyncResult iAr)
{
try
{
int count = 0;
try
{
count = socket.EndReceive(iAr);
}
catch
{
Disconnect();
}
StringBuilder builder = new StringBuilder();
builder.Append(System.Text.Encoding.Default.GetString(this.dataBuffer, 0, count));
string str = System.Text.Encoding.Default.GetString(this.dataBuffer, 0, count);
if (str.Contains("<policy-file-requet/>"))
{
Log.Info("Sending policy file to client" + this.index);
rawSend("<?xml version\"1.0\"?><cross-domain-policy><allow-access-from-domain=\"*\" to-ports=\"*\" /><cross-domain-policy>" + Convert.ToChar(0));
}
else if (!(str.ToString() == ""))
{
string packet = str.Substring(0, str.Length - 1);
//packet = ArchiCruise.Security.Encryption.decrypt(packet);
Log.Info("Got " + str + " from client " + this.index);
Particle.packetClass.handle(packet, this);
}
else
{
Disconnect();
}
}
catch (Exception exception)
{
Log.Info("Data recieve error: " + exception.ToString() + " " + exception.Source);
Disconnect();
}
finally
{
this.WaitForData();
}
}
private void WaitForData()
{
try
{
socket.BeginReceive(this.dataBuffer, 0, this.dataBuffer.Length, SocketFlags.None, this.ReceiveCallback, socket);
}
catch
{
Disconnect();
}
}
public void sendData(string Data)
{
Data += (char)1;
rawSend(Data);
}
internal void rawSend(string Data)
{
try
{
Data += "\0";
byte[] bytes = System.Text.Encoding.Default.GetBytes(Data);
socket.BeginSend(bytes, 0, bytes.Length, SocketFlags.None, new AsyncCallback(this.sentData), null);
Log.Info("Sent " + Data + " to client " + this.index);
}
catch
{
Disconnect();
}
}
private void sentData(IAsyncResult iAr)
{
try
{
socket.EndSend(iAr);
}
catch
{
Disconnect();
}
}
}
}
Дерьмо, спасибо. Это не полностью решает проблему, как я сейчас только получаю; '[31/1/2016 18:19:50] Начато ведение журнала сервера частиц ... [31/1/2016 18:19:51] Тестовый запрос выполнен успешно. База данных инициализирована. [31/1/2016 18:20:04] 127.0.0.1связано. Полный 127.0.0.1:58625 [31/1/2016 18:20:04] Отправка файла политики клиенту0 [31/1/2016 18:20:04] Отправлено Xml version "1.0"?> <междоменная политика> клиенту 0 [31/1/2016 18:20:04] Client0 отключен и удалено. ' –
Нужно, очевидно, продолжить и подключить клиента к серверу и получить их ssoticket и т. д. ... но его все еще отталкивает их от сервера. –
Получите свой билет на SSO? :) Извините, это не услуга, помогающая развитию эмуляции. – DominicEU