我正在使用.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);
第一次发送/接收工作,但不是第二次。第二次抛出异常“现有连接被远程主机强行关闭”。在发出另一个发送/接收之前,我还需要做什么?
非常感谢你阅读。
答案 0 :(得分:1)
问题可能是这些
服务器可能已关闭连接,因为您可能发送了无效数据包。检查您发送的数据是否有效。调试或在服务器端有一个tcp / ip数据包监视器并检查你收到的数据包。