用vb中winsock接受資料時經常會少接收第一個位元組,求解決辦法
uj5u.com熱心網友回復:
代碼呢?不會是你處理陣列的時候用錯下標了吧。
uj5u.com熱心網友回復:
不知道有多少前人掉在TCP Socketsend(人多)send(病少)send(財富)
recv(人多病)recv(少財富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545
uj5u.com熱心網友回復:
沒有用錯,偶爾也會出現正確的資料包的
uj5u.com熱心網友回復:
你接收資料沒有正確分包吧,前次處理程序多了一個位元組。
或者你清除了輸入緩沖區,把一部分資料丟棄了。
uj5u.com熱心網友回復:
你接收資料沒有正確分包吧,前次處理程序多了一個位元組。
或者你清除了輸入緩沖區,把一部分資料丟棄了。
沒有,我在同一臺電腦上進行資料傳輸時就不會丟失資料,但是 用下位發時就會丟失第一個數,而且是經常性丟失,但也有正常的情況
uj5u.com熱心網友回復:
Private Sub sckclient1_DataArrival(ByVal bytesTotal As Long)Dim thestring As String
Dim strdata() As Byte
Dim pos As Integer
sckclient1.GetData strdata(), vbArray Or vbByte
For pos = 0 To UBound(strdata)
thestring = thestring & "-" & strdata(pos) & "-"
這是我的接收程序
uj5u.com熱心網友回復:
沒看明白,這是我的代碼
Private Sub sckclient1_DataArrival(ByVal bytesTotal As Long)
Dim thestring As String
Dim strdata() As Byte
Dim pos As Integer
sckclient1.GetData strdata(), vbArray Or vbByte
For pos = 0 To UBound(strdata)
thestring = thestring & "-" & strdata(pos) & "-"
我用網路除錯助手除錯時能正確接收,所以應該是接收沒有處理好,請指點一下
uj5u.com熱心網友回復:
一次多少資料?Winsock除非緩沖區溢位,一般不容易丟資料。多加些 Debug.Print,看看 bytesTotal、UBound(strdata)、thestring 是否正常。
uj5u.com熱心網友回復:
Private Sub sckclient1_DataArrival(ByVal bytesTotal As Long)Dim thestring As String
Dim strdata() As Byte
Dim pos As Integer
ReDim strdata(bytesTotal-1)
sckclient1.GetData strdata(), vbArray Or vbByte
For pos = 0 To UBound(strdata)
thestring = thestring & "-" & strdata(pos) & "-"
uj5u.com熱心網友回復:
一次4個位元組
uj5u.com熱心網友回復:
概念錯誤。Tcp是流。
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(財富)
recv(人多病)recv(少財富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545
uj5u.com熱心網友回復:
概念錯誤。Tcp是流。
無知!DataArrival收到包就觸發。4位元組不會再分包了。
uj5u.com熱心網友回復:
[Quote=參考 11 樓 zhao4zhong1 的回復:]概念錯誤。Tcp是流。
無知!DataArrival收到包就觸發。4位元組不會再分包了。
發送端發送4位元組,接收方可能DataArrival
1+1+1+1
2+1+1
3+1
1+2+1
1+1+2
1+3
2+2
3+1
4
uj5u.com熱心網友回復:
發送端發送4位元組,接收方可能DataArrival
1+1+1+1
2+1+1
3+1
1+2+1
1+1+2
1+3
2+2
3+1
4
不會。
WinSock兩次發送只有一次DataArrival倒是有可能的,不會把4位元組拆成多個包。
WinSock不是串口!
WinSock不是串口!
[size=32px]WinSock不是串口![/size]
uj5u.com熱心網友回復:
設TCP底層緩沖區默認大小為4096位元組。一次發送被拆成多次DataArrival的原因在于這次發送的內容剛好跨TCP底層緩沖區的本次末尾和下次開頭。
也許永遠不可能
1+1+1+1
但
4095+1+3+...
4094+2+2+...
4093+3+1+...
的可能還是很大嘀!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/92518.html
標籤:VB基礎類
下一篇:VB高手解決難題最少步數
