c# - 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.Connect
netstat
42448
TIME_WAIT
TIME_WAIT
更新 1
它不是服务器套接字,所以这里没有监听。LingerOption
也不起作用:
LingerOption lo = new LingerOption(false, 0);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo);
解决方案
推荐阅读
- java - 如何在列表和迭代器中删除警告[不是@SuppressWarnings] [在两行代码上应用什么泛型类型]
- css - 我在 highcharts 标题上的 css 工具提示不起作用
- java - 如何通过 Kotlin Gradle 和 -D 为我的测试提供系统属性
- javascript - 在 Javascript 端保存处理程序之前计算 vTiger 字段(内部代码)
- reactjs - 过多的项目渲染
- javascript - 角度材质 - 对材质表进行排序后,动画过渡开始状态未更新
- unity3d - 在 Unity 的多选下拉菜单中显示 ScriptableObjects
- reactjs - 传递参数 onClick, React
- android - 唯一约束失败:type.ps
- yii2 - Yii2 使用 ajax 提交模态表单