gpt4 book ai didi

c# - TCP 套接字未正确关闭

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

我有一个静态方法

public class TelnetClient
{
public static string SendAndReceiveData2(string data, string HostIPAddress, int Port)
{
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
socket.Connect(HostIPAddress, Port);
byte[] bytesToSend = Encoding.ASCII.GetBytes(data);
socket.ReceiveTimeout = 3000;
socket.SendTimeout = 3000;
int bytesSent = socket.Send(bytesToSend);
if (bytesSent != bytesToSend.Length)
{
throw new Exception("Invalid send byte number");
}


byte[] bytesReceiveBuffer = new byte[1024];
int bytesRec = socket.Receive(bytesReceiveBuffer); //No need to loop for testing
string returnedData = Encoding.ASCII.GetString(bytesReceiveBuffer, 0, bytesRec);

socket.Close(); // Just out of desperation
socket.Dispose();
return returnedData;
}
}
}

我是这样调用它的:

for (int i = 0; i < 10; i++)
{
TelnetClient.SendAndReceiveData2("some data different each time", "127.0.0.1", 1234);
}

我在循环中调用这个方法。此方法将一些命令发送到第三方应用程序,第三方应用程序会立即返回响应。问题是此代码适用于第一次迭代,但在第二次迭代中,它在 socket.Receive 处失败并出现错误:

A connection attempt failed because the connected party did not properly respond after a period of time, or the established connection failed because the connected host has failed to respond.

这是棘手的部分,如果我不是多次循环,而是关闭 exe 并通过命令提示符重新启动,我不会收到错误消息,第三方应用程序也会收到多个请求以及。

这让我相信不知何故套接字没有在循环中正确处理。但是如果我关闭进程重新启动就没有问题了。

我检查过 socket.LocalEndPoint 每次都指向不同的端口。此外,socket.Available 在第二次迭代时设置为 0

我不太确定发生了什么,希望得到任何帮助。

最佳答案

我注意到您正在执行 Socket.Connect,但从未执行 Socket.Disconnect。

来自 MSDN 网站 Socket.Disconnect将允许重用套接字并关闭连接。

关于c# - TCP 套接字未正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340115/

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