我用vb+socket做通信轉發程式,程式作為服務器端采用socket控制元件陣列(sockServer(index))同時接受多個客戶端的資料請求,處理后作為客戶端發送給服務器,與服務器通信使用一個socket控制元件(sockClient())長連接,在控制元件陣列的sockServer_DataArrival事件中
Private Sub sockServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
.....
scokServer(index).getdata strtemp,vbstring
doevents
.....
end sub
我現在在服務端 采用了doevents,但仍舊產生了服務端發送的資料丟失的情況.現象是可以穩定的并行一段時間,在這個時間之后就會隨機地在某一個客戶端上丟失資料
uj5u.com熱心網友回復:
我以前的思路是:將每次獲得的包進行校驗,不正確就發送訊息叫重發,直到結束。uj5u.com熱心網友回復:
我是發三次但沒有收到資料,是winsock 運行一段時間就無法觸發DataArrival接收不到資料uj5u.com熱心網友回復:
自己頂一下吧uj5u.com熱心網友回復:
有些路由你連接后長時間沒資料收發 會關閉連接的 而且這種連接關閉 雙方都不會觸發到 就好像拔網線一樣 要避免這種情況就要有心跳包的機制 確認客戶端和服務端是否有回傳uj5u.com熱心網友回復:
我發心跳包了,連接多了就不相應DataArrivaluj5u.com熱心網友回復:
我也發心跳包了,是服務器端沒有接收資料沒有觸發DataArrival事件,uj5u.com熱心網友回復:
不知道有多少前人掉在TCP Socketsend(人多)send(病少)send(財富)
recv(人多病)recv(少財富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545
uj5u.com熱心網友回復:
A)你處理資料的速度跟不上資料的接收速度,緩沖區溢位而導致丟資料。把接收和處理程式分開,通過檔案來異步傳遞資料。
B)同時連接的客戶端數太多。
改用令牌回圈,僅持有令牌的客戶端才能發送資料。
uj5u.com熱心網友回復:
資料量也不多,是丟包了。用不同的網路助手也會有這樣丟包的現象,是否跟電腦配置有關uj5u.com熱心網友回復:
協議不是TCP是UDP?UDP是允許丟包的。
uj5u.com熱心網友回復:
協議就是TCPuj5u.com熱心網友回復:
發送端有沒有處理 send 不成功的情況?uj5u.com熱心網友回復:
send 是發送出去了,與DTU硬體通信的檢測到串口有資料,但服務器沒有接收到資料,抓包軟體也找不到資料uj5u.com熱心網友回復:
波特率太高了,線路不穩定?那樣send應該不成功。這個聽起來不像程式問題了,只能懷疑硬體故障了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/109526.html
標籤:網絡編程
上一篇:新人求關照
