2016-01-31 2 views
-1

У меня есть сервер, который прослушивает подключения из 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(); 
      } 
     } 
    } 
} 

ответ

3

Вы совершили орфографическую ошибку.

if (str.Contains("<policy-file-requet/>")) 

Должно быть

if (str.Contains("<policy-file-request/>")) 
+0

Дерьмо, спасибо. Это не полностью решает проблему, как я сейчас только получаю; '[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] Отправлено <междоменная политика> клиенту 0 [31/1/2016 18:20:04] Client0 отключен и удалено. ' –

+0

Нужно, очевидно, продолжить и подключить клиента к серверу и получить их ssoticket и т. д. ... но его все еще отталкивает их от сервера. –

+0

Получите свой билет на SSO? :) Извините, это не услуга, помогающая развитию эмуляции. – DominicEU

Смежные вопросы