0

ソケットを使用するフレックスアプリを作成しました。Glassfishサーバーで実行されるWebアプリケーションでflexアプリを公開しました。そのフレックスアプリから、C#サーバーへのソケット接続を作成し、データの送受信を開始します。問題は、C#サーバーへのソケット接続を作成した後、flexアプリが最初にポリシーファイルをチェックし、それを取得した後、接続を維持せずにソケットを閉じることです。

これは私のC#サーバーです:

TcpListener tcpListener = new TcpListener(IPAddress.Parse("172.17.41.211"), 12345);
TcpClient tcpclient = tcpListener.AcceptTcpClient();

Socket client = tcpclient.Client;
while (client.Available > 0)
{
   int bytes = 0;
   byte[] m_aBuffer = new byte[1024];
   bytes = client.Receive(m_aBuffer, m_aBuffer.Length, SocketFlags.None);
   String str = Encoding.ASCII.GetString(m_aBuffer, 0, bytes);
   if (str.StartsWith("<policy-file-request/>"))
   {
      sendBytes = Encoding.ASCII.GetBytes("<cross-domain-policy><allow-access-from domain=\"172.17.41.211\" to-ports=\"12345\"/></cross-domain-policy>\0");
      client.Send(sendBytes);
   }
}

while (client.Connected)
{
   Thread.Sleep(200);
   sendBytes = Encoding.ASCII.GetBytes("message to client");
   client.Send(sendBytes, sendBytes.Length, SocketFlags.None);
}

これで、flexクライアントは次のようになります。

private var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
socket.addEventListener(ErrorEvent.ERROR, errorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
...
socket.connect("172.17.41.211", 12345);    
...

接続を作成し、サーバーからポリシーを取得した後、このソケットを閉じるので、この接続を使用できるようにするには、もう一度呼び出す必要があります

socket.connect("172.17.41.211", 12345));

これを行うと、通常どおり接続を使用できます。

誰かがなぜこれが起こるのか、そしておそらく接続を閉じていない可能性があるのか​​を示唆できますか?

4

1 に答える 1

0

ソケット自体を介してポリシーファイルを送信することはありません。別のチャネルにある必要があります。たとえば、あるIP /ポートに接続する場合、デフォルトでは、フラッシュは同じIPに接続しようとしますが、ポート843で、マスターポリシーファイルを探します。

を使用して手動で設定することもできますSecurity.loadPolicyFile(someURL)詳細については、こちらをご覧ください

于 2011-09-28T07:45:30.633 に答える