1
我正在使用.NET Socket类。如何在不关闭套接字的情况下多次调用套接字发送和接收?
基本上我的程序是通过TCP发送XML命令到我的服务器(运行一些第三方服务),它会发回一个XML响应。
我想要做的是发送和接收多次而不关闭套接字,因为如果我在很短的时间内打开和关闭套接字太多次,服务器似乎会放慢速度。
剥离下来的我的代码版本:
//Connects to server
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipe = new IPEndPoint("123.123.123.123", 8199);
socket.Connect(ipe);
//Send my message
int sent = sock.Send(buffer, buffer.Length, SocketFlags.None); //buffer contains my XML data
//Receives respond from server
byte[] buf = new byte[65536];
int ret = socket.Receive(buffer, 0, 65536, SocketFlags.None);
//Send my message again without closing the socket
sent = sock.Send(buffer, buffer.Length, SocketFlags.None); //buffer contains my XML data
//Receives respond from server failed..
ret = socket.Receive(buffer, 0, 65536, SocketFlags.None);
它发送/接收工作的第一次,但不是第二次。第二次它引发异常“现有连接被远程主机强行关闭”。在我能发出另一个发送/接收之前,我需要做什么?
非常感谢您的阅读。
不工作意味着什么?它阻塞了吗?或者它返回-1?或抛出一些异常? – Jeeva 2012-03-22 04:15:36
以及接收方法的代码在哪里?或者那是否意味着是袜子。接受?什么是FLASHNET_CMD_LENGTH设置为? – 2012-03-22 05:27:59
@Jeeva它引发异常“现有连接被远程主机强行关闭”。 – Bruce 2012-03-22 05:54:18