完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
经测试发现,MCU同时开1个TCP服务端(端口号:1111)和1个TCP客户端(端口号:2222),服务IP(PC端)都是192.168.3.100
此时电脑只开1个客户端的软件与MCU的TCP服务端(1111)连接,MCU的客户端(2222)因为没有连接,所以每200mS超时后, 本地端口号+1重新建立连接,这时只要在电脑软件上反复几次连接/断开MCU的服务端(端口号:1111),这时很大几率会发生MCU客户端(端口号:2222)对应打印出来"TCP Connect Success",而且不会再每200mS重新连接,换句话说,电脑端要连的是服务端的1111,这时却被客户端的2222认为连接成功了,libwchnet.a库又不开放,想改也无从改起 |
|
相关推荐
3个回答
|
|
希望提供MCU端和PC端全部的IP和端口信息,以及验证的流程及状态,避免双方信息理解上的误差
。 正常情况下MCU的TCP_Cleint的socket在没连上服务器前不会显示连接成功,并且您电脑端也没有开启TCP服务器。 MCU的IP:192.168.3.150 MCU服务端口:1111,服务IP:192.168.3.100 MCU客户端口:2222,服务IP:192.168.3.100 电脑客户端软件IP:192.168.3.100,远程端口:1111 这个配置是可以跟MCU的服务端能通信的,只是反复断开/连接的话,MCU的客户端就认为已连接,基本上断开/连接几次就会客户端认为已建立连接,但实际上电脑软件不可能跟客户端建立连接 |
|
|
|
问您是如何判断,产生TCP连接中断的是TCP_Client产生,如果您是通过Socket的话,这个是不太准确的,因为协议栈内部,当Tcp_client对应的socket多次连接都无法连接上服务器时,这个socket会被释放掉,然后您tcp-server如果这时有新的客户端连接进来,就会占用这个socket。
tcp客户端如果连不上,会发生超时,但当打印已经连接成功信息后就没有超是了,而且连接的sock索引号就是客户端的索引号,因为打开只有2个sock,不是客户端就是服务端,如果能跟软件连上的是服务端,那么是可以通信的,然而打印信息显示连接成功,但电脑软件却没有连接 |
|
|
|
307的网络库,作为tcp客户端的时候,是不会不停的发送连接请求包的,当里调用创建Socket函数后,会发送一定次数的链接请求包(重传包),如果连不上,就会发送超时中断,此时,如果有TCP-server多链接模式下,客户端链接,就会占用这个socket,提示链接成功。
这好像也不合理,如果是服务端与电脑建立连接,那为什么电脑端并没有连接成功呢?而且如果这么做你让程序员怎么知道明明配置的是客户端,后来就变成了与服务端通信的sock呢?客户端链不上也不应该把端口释放啊,发生超时就好了,如果按库这么操作,哪里还分得出这个sock是什么功能呢? |
|
|
|
只有小组成员才能发言,加入小组>>
474 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2873 浏览 2 评论
2361 浏览 1 评论
817浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
640浏览 1评论
498浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
364浏览 1评论
639浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 13:07 , Processed in 1.502933 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号