gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:52:47 25 4
gpt4 key购买 nike

我正在使用 .NET Socket类。

基本上我的程序是通过 TCP 将 XML 命令发送到我的服务器(运行一些第 3 方服务),它会发回 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 数据包监视器并检查您收到的数据包。

关于c# - 如何在不关闭套接字的情况下多次调用套接字发送和接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com