我创建了一个使用套接字的flex应用程序。我在一个运行在glassfish服务器上的web应用程序中发布了flex应用程序。 现在,我从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));
在我这样做后,我可以使用normall连接。
有人可以建议为什么会发生这种情况,也许有可能没有关闭连接?
我可以问*为什么*您首先使用套接字服务器?有一个非常具体的原因,或者你只是想连接到你的服务器?因为连接客户端到服务器的方法比创建自己的套接字更容易和更好,因为已经创建了很多已知的标准,并且已经有了很好的标准。 –
是的,这是我们需要以特定方式与服务器通信的事情。 – simion
你能说得更具描述性吗?这可能是一个更好的选择。 –