Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不关闭套接字的情况下多次调用套接字发送和接收?_C#_.net_Sockets_Tcp - Fatal编程技术网

C# 如何在不关闭套接字的情况下多次调用套接字发送和接收?

C# 如何在不关闭套接字的情况下多次调用套接字发送和接收?,c#,.net,sockets,tcp,C#,.net,Sockets,Tcp,我正在使用.NET类 基本上,我的程序是通过TCP将XML命令发送到我的服务器(运行一些第三方服务),然后它将发送回XML响应 我想做的是在不关闭套接字的情况下多次发送和接收,因为如果我在短时间内打开和关闭套接字太多次,服务器似乎会变慢 我的代码的精简版本: //Connects to server s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipe = n

我正在使用.NET类

基本上,我的程序是通过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);
它第一次发送/接收工作,但第二次不工作。第二次抛出异常“现有连接被远程主机强制关闭”。在发出另一个发送/接收之前,我需要做什么


非常感谢您的阅读。

问题可能是这些

  • 其他终结点可能已关闭连接
  • 您的Receive方法被阻塞,因为其他客户端没有发送数据

服务器可能已关闭连接,因为您可能有发送无效数据包的权限。检查您发送的数据是否有效。在服务器端调试或使用tcp/ip数据包监视器,并检查您收到的数据包。

问题可能是这些

  • 其他终结点可能已关闭连接
  • 您的Receive方法被阻塞,因为其他客户端没有发送数据

服务器可能已关闭连接,因为您可能有发送无效数据包的权限。检查您发送的数据是否有效。调试或在服务器端安装tcp/ip数据包监视器,并检查您收到的数据包。

不工作意味着什么?它阻塞了吗?还是返回-1?或者抛出一些异常?接收方法的代码在哪里?或者那是指袜子。收到吗?FLASHNET_CMD_LENGTH设置为多少?@Jeeva它引发异常“远程主机强制关闭了现有连接”。@StevenP抱歉粘贴了错误的接收方法,用正确的调用编辑了原始帖子。可能是因为服务器已关闭连接?以web服务器为例,它接收连接尝试,读取请求并写入响应,然后关闭套接字。它是HTTP标准的一部分。您连接到的服务器可能以相同的方式工作。不工作意味着什么?它阻塞了吗?还是返回-1?或者抛出一些异常?接收方法的代码在哪里?或者那是指袜子。收到吗?FLASHNET_CMD_LENGTH设置为多少?@Jeeva它引发异常“远程主机强制关闭了现有连接”。@StevenP抱歉粘贴了错误的接收方法,用正确的调用编辑了原始帖子。可能是因为服务器已关闭连接?以web服务器为例,它接收连接尝试,读取请求并写入响应,然后关闭套接字。它是HTTP标准的一部分。您连接到的服务器可能以相同的方式工作。