libwchnet.a庫文件有bug,沒源文件不能修改都不知道要怎樣處理

經(jīng)測試發(fā)現(xiàn),MCU同時開1個TCP服務(wù)端(端口號:1111)和1個TCP客戶端(端口號:2222),服務(wù)IP(PC端)都是192.168.3.100

此時電腦只開1個客戶端的軟件與MCU的TCP服務(wù)端(1111)連接,MCU的客戶端(2222)因為沒有連接,所以每200mS超時后,

本地端口號+1重新建立連接,這時只要在電腦軟件上反復(fù)幾次連接/斷開MCU的服務(wù)端(端口號:1111),這時很大幾率會發(fā)生MCU客戶端(端口號:2222)對應(yīng)打印出來"TCP Connect Success",而且不會再每200mS重新連接,換句話說,電腦端要連的是服務(wù)端的1111,這時卻被客戶端的2222認(rèn)為連接成功了,libwchnet.a庫又不開放,想改也無從改起


您好,您的大致試用方式這邊稍有了解,希望提供MCU端和PC端全部的IP和端口信息,以及驗證的流程及狀態(tài),避免雙方信息理解上的誤差。

正常情況下MCU的TCP_Cleint的socket在沒連上服務(wù)器前不會顯示連接成功,并且您電腦端也沒有開啟TCP服務(wù)器。


MCU的IP:192.168.3.150

MCU服務(wù)端口:1111,服務(wù)IP:192.168.3.100

MCU客戶端口:2222,服務(wù)IP:192.168.3.100

電腦客戶端軟件IP:192.168.3.100,遠(yuǎn)程端口:1111

這個配置是可以跟MCU的服務(wù)端能通信的,只是反復(fù)斷開/連接的話,MCU的客戶端就認(rèn)為已連接,基本上斷開/連接幾次就會客戶端認(rèn)為已建立連接,但實際上電腦軟件不可能跟客戶端建立連接


您好,請問您是如何判斷,產(chǎn)生TCP連接中斷的是TCP_Client產(chǎn)生,如果您是通過Socket的話,這個是不太準(zhǔn)確的,因為協(xié)議棧內(nèi)部,當(dāng)Tcp_client對應(yīng)的socket多次連接都無法連接上服務(wù)器時,這個socket會被釋放掉,然后您tcp-server如果這時有新的客戶端連接進(jìn)來,就會占用這個socket。


tcp客戶端如果連不上,會發(fā)生超時,但當(dāng)打印已經(jīng)連接成功信息后就沒有超是了,而且連接的sock索引號就是客戶端的索引號,因為打開只有2個sock,不是客戶端就是服務(wù)端,如果能跟軟件連上的是服務(wù)端,那么是可以通信的,然而打印信息顯示連接成功,但電腦軟件卻沒有連接


您好,307的網(wǎng)絡(luò)庫,作為tcp客戶端的時候,是不會不停的發(fā)送連接請求包的,當(dāng)里調(diào)用創(chuàng)建Socket函數(shù)后,會發(fā)送一定次數(shù)的鏈接請求包(重傳包),如果連不上,就會發(fā)送超時中斷,此時,如果有TCP-server多鏈接模式下,客戶端鏈接,就會占用這個socket,提示鏈接成功。


這好像也不合理,如果是服務(wù)端與電腦建立連接,那為什么電腦端并沒有連接成功呢?而且如果這么做你讓程序員怎么知道明明配置的是客戶端,后來就變成了與服務(wù)端通信的sock呢?客戶端鏈不上也不應(yīng)該把端口釋放啊,發(fā)生超時就好了,如果按庫這么操作,哪里還分得出這個sock是什么功能呢?


您好,客戶端timeout后,需要重新創(chuàng)建socket,調(diào)用創(chuàng)建函數(shù)時會重新分配socketid,把這個socketid就是這個客戶端的I'd,記錄下來就好了。


@TECH10

請問當(dāng)發(fā)生打印"TCP Connect Success"時能確定這個socket是原來的客戶端,還是釋放端口后被重新分配的外鏈端口呢?因為只有sock的id,我怎么知道這個socket已經(jīng)被重新分配了呢?順便說一句,如果服務(wù)端的話,它可能會有多連接,所以動態(tài)分配端口這個沒有異議,但是本地的TCP客戶端并不可能有多個連接,為什么要庫自動釋放這個socket又重新分配呢?連接不上的話為什么不能讓用戶使用原來的socket重新建立連接呢?譬如本地的TCP客戶端要使用比較大的接收發(fā)送緩沖4096字節(jié),然后其他只用200字節(jié),這個時候把原來分配給客戶端的socket重新分配給外鏈的端口,那綁定的緩沖怎么辦?要重新分配給本地客戶端的緩沖就變成200字節(jié)了,這樣造成一個緩沖過剩,一個不夠緩沖,如果把所有的緩沖都改4096的話,就實在太浪費(fèi)資源了,而且內(nèi)存使用起來也不一定夠


還有TCP服務(wù)端為什么不能像UDP服務(wù)端那樣,使用回調(diào)函數(shù)指針呢(TmpSocketInf.AppCallBack = WCHNET_UdpServerRecv)

那樣的話就可以知道接入的端口IP地址了,現(xiàn)在的只有sockid有什么用?除了只接一個外部鏈接的情況以外,例如:有一個IP:192.168.3.101:1111首先接入(庫分配的sockid=3),然后IP:192.168.3.102:1111接入(庫分配的sockid=4),然后IP:192.168.3.101:1111的socket斷開,即sockid=3被釋放了,此時IP:192.168.3.102:1111斷開后,立即重新接入,然后IP:192.168.3.101:1111再接入,那么最后的結(jié)果是sockid=3是IP:192.168.3.102:1111,sockid=4的是IP:192.168.3.101:1111,sockid對應(yīng)接入的IP順序就反了,如果IP:192.168.3.101的數(shù)據(jù)轉(zhuǎn)串口1,192.168.3.102的數(shù)據(jù)轉(zhuǎn)串口2,這個時候所有的數(shù)據(jù)都不對了


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频