TCP自连接问题

背景:

在更新后端服务的时候,发现服务端口被占用了,然后去排查端口,发现端口形成了自连接。(也可以用netstat -anp|grep 18082
这里写图片描述
上述问题就是TCP的自连接问题。所谓TCP自连接,就是出现源ip:源端口和目的ip:目的端口完全相同的情况。
原因在于客户端在连接服务端时,如果没有指定端口号,系统会随机分配一个。随机就意味着可能分配一个和目的端口一样的数字,此时就会出现自连接情况了。因为对于tcp协议来讲,连接的流程是走的通,三次握手整个阶段都合法,连接自然可以建立。
自连接的坏处显而易见,当程序去connect一个不处于监听的端口时,必然期待其连接失败,如果自连接出现,就意味着该端口被占用了,那么:
- 真正需要监听该端口的服务会启动失败,抛出端口已被占用的异常。
- 客户端无法正常完成数据通信,因为这是个自连接,并不是一个正常的服务。

解决方法

解决办法也很简单,只要保证客户端随机的端口不会和服务监听的端口相同就可以了。那么我们得先了解随机的范围,这个范围对应linux的/etc/sysctl.conf的net.ipv4.ip_local_port_range参数,其默认值是32768 61000。也就是说随机端口会在这个范围内出现,试验中我们选定了55555这个端口,所以出现了自连接现象。此时只要限定服务监听在32768端口以下,就不会出现自连接现象了。当然,你可以修改这个配置,只要注意保证监听端口不再配置范围内就可以避免自连接问题了。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
在WinForm中使用Modbus TCP自动连接的实现过程如下: 1. 添加Modbus TCP库:首先,需要在项目中添加Modbus TCP库。可以通过NuGet包管理器安装相应的Modbus TCP库,例如NModbus或EasyModbus。 2. 创建连接配置:在WinForm中创建一个用于配置连接参数的窗体或控件,包括主机地址、端口号等信息。用户可以通过此窗体输入和保存连接配置。 3. 自动连接功能:在主窗体的Load事件中实现自动连接功能。首先,读取之前保存的连接配置,如果配置存在,则尝试自动连接。如果配置不存在,或者连接失败,则弹出连接配置窗体供用户手动输入参数。 4. 连接状态显示:在主窗体中添加一个连接状态的标签或图标,用于显示当前连接状态。当自动连接或手动连接成功时,更新连接状态为“已连接”。当连接断开时,更新连接状态为“连接断开”。 5. 连接处理:使用Modbus TCP库提供的方法,在连接成功后,可以执行读写Modbus数据的操作。例如,读取某个寄存器值并在界面上显示,或者写入数据到寄存器等。 6. 重连逻辑:在连接断开后,可以通过设置一个定时器,在一定时间间隔后尝试重新连接,以实现自动重连功能。当连接成功后,停止定时器。 7. 异常处理:在连接过程和数据读写过程中,要进行异常处理。例如,捕获连接超时、连接拒绝等异常,并进行相应的处理,如提示用户重新配置连接参数或重连。 通过以上步骤,可以在WinForm中实现Modbus TCP自动连接的功能。这样可以简化用户的操作,提高软件的易用性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值