ソケットを使用するフレックスアプリを作成しました。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));
これを行うと、通常どおり接続を使用できます。
誰かがなぜこれが起こるのか、そしておそらく接続を閉じていない可能性があるのかを示唆できますか?