首页 > 解决方案 > c# 修复 tcp 客户端本地端点端口导致 SocketException

问题描述

我可以从本地端点取消绑定套接字吗?出于安全目的,我需要修复 TCP 通信的源端口。在此客户端代码中,我将源端口修复为42448

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
ProtocolType.Tcp);
IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("192.168.1.123"), 42448);
s.Bind(localEP);
s.Connect(remoteEP);
s.Send(new byte[] { 0x01, 0x02, 0x03 });
s.Close();

它只工作一次。正如我在 中看到的,第二次它在线路上抛出SocketException(该地址已在使用),即使我关闭应用程序,该源端口也有一个连接状态。大约 1 分钟后,此连接消失,我可以运行我的代码,但只能运行一次。我怎样才能正确地解除绑定这个套接字,以便我可以多次运行代码?s.Connectnetstat42448TIME_WAITTIME_WAIT

更新 1 它不是服务器套接字,所以这里没有监听。LingerOption也不起作用:

LingerOption lo = new LingerOption(false, 0);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo);

标签: c#socketstcpendpoint

解决方案


推荐阅读