gpt4 book ai didi

c# - 如何使用 .Net 套接字重用 TCP 端点地址

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

我有一些客户端-服务器套接字代码,我希望能够构建这些代码并定期(重新)连接到相同的端点地址:localhost:17999

这是服务器:

// Listen for a connection:
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Loopback, 17999);
Socket listener = new Socket(IPAddress.Loopback.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
listener.Bind(localEndPoint);
listener.Listen(1);

// Accept the connection and send a message:
Socket handler = listener.Accept();
byte[] bytes = new byte[1024];
bytes = Encoding.ASCII.GetBytes("The Message...");
handler.Send(bytes);

// Clean up
handler.Shutdown(SocketShutdown.Both);
handler.Close();
handler.Dispose();

listener.Shutdown(SocketShutdown.Both);
listener.Close();
listener.Dispose();

这是客户端:

byte[] bytes = new byte[1024];
Socket receiver = new Socket(IPAddress.Loopback.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
receiver.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
receiver.Connect(new IPEndPoint(IPAddress.Loopback, 17999));

int num_bytes_received = receiver.Receive(bytes);
string result = Encoding.ASCII.GetString(bytes, 0, num_bytes_received);

receiver.Shutdown(SocketShutdown.Both);
receiver.Close();
receiver.Dispose();

当我第一次创建客户端和服务器时,它工作正常。但是,当我再次创建它时,出现错误:

"A request to send or receive data was disallowed because the socket is not conne cted and (when sending on a datagram socket using a sendto call) no address was supplied"

我希望能够在需要时按以下事件顺序任意启动此机制:

  1. 启动服务器并等待接受连接
  2. 启动客户端并连接到服务器
  3. 在服务器端接受客户端连接
  4. 给客户发消息
  5. 必要时重复

我该怎么做?

提前致谢!

编辑:每次我构建客户端和服务器对象时,它都来自不同的进程。

最佳答案

你有两个问题:

1) 您正在关闭监听器。保持打开状态即可。

2) 您在错误的套接字上设置 ReuseAddress 并且为时已晚。在您调用 bind 之前将其设置在监听套接字上(因为那是您使用地址的时候)。

在您不打算绑定(bind) 的套接字上设置ReuseAddress 不会执行任何操作。您可以从客户端中删除它。

关于c# - 如何使用 .Net 套接字重用 TCP 端点地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15242178/

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