用winsock发送较大的字符串时是不是容易丢包?
用winsock发送较大的字符串时是不是容易丢包?
我一次发送8100个字节的字符时,对方只收了一半。不知是何原因?
问题点数:20、回复次数:17Top
1 楼scottzy()回复于 2004-11-01 17:06:56 得分 0
winsock发送字符串有大小限制,你最好在每次发的字符串头尾加标记和长度来判别,建议循环发送Top
2 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-01 17:09:50 得分 0
你用的是udp协议吧,最好udp要少于4k要不容易丢包
udp不管多大都容易丢包的Top
3 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-01 17:10:28 得分 0
建议重要的数据用tcp协议
要不就拆包,和加包头Top
4 楼dyhgoa(羚羊)回复于 2004-11-02 08:13:57 得分 0
我用的TCP协议啊?Top
5 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-02 08:33:34 得分 0
tcp就肯定没问题,是你处理的问题,贴代码Top
6 楼jonahclinton(克林顿)回复于 2004-11-02 08:39:29 得分 0
关注中……Top
7 楼blackbug119(黑虫子)回复于 2004-11-02 08:48:32 得分 0
用BTYE来传,每次8字位,写WHILE,用TCPTop
8 楼dyhgoa(羚羊)回复于 2004-11-02 13:35:49 得分 0
我是要发送richtext的textrtf码?
const SendByte=8100
lngSize = Len(txtMessage.TextRTF)
lngZsize = Len(txtMessage.TextRTF)
t = 0
Do
If lngSize < SendByte Then
intSize = lngSize
Else
intSize = SendByte
End If
btData = Mid(txtMessage.TextRTF, t * SendByte + 1, intSize)
wskClinet.SendData "32,2," & btData
lngSize = lngSize - intSize
t = t + 1
Loop Until lngSize = 0
我发发送16100字节,对方只能收到11000字节,如果本机上传就OK。Top
9 楼Surpass((本账户已更换主人))回复于 2004-11-02 14:00:59 得分 5
http://www.dot618.net/
有我写的源码Top
10 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-02 14:49:24 得分 10
wskClinet.SendData "32,2," & btData
'这里+
doeventsTop
11 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-02 14:51:24 得分 0
这快代码要不是doevents的事,你就给我发消息,在贴全点代码,我给你看看Top
12 楼baoaya(点头)(大风起兮云飞扬)回复于 2004-11-02 17:10:56 得分 5
tcp 不可能掉包的
也许你数据太大了 建议一次传送1.4k ,因为在2台主机 传输数据的时候 由于网络的原因 你一次发送的数据再大,其实每次也只发送了1.4k 左右(主要看网络情况 局域网可能还要大) 所以在接收端会发送分包现象,反之,如果一次传送的数据太少的话 就发生粘包现象Top
13 楼dyhgoa(羚羊)回复于 2004-11-03 09:28:56 得分 0
不是doevents的事,就是发送端OK的,接送端出现分包现象,我改成4K,还不行,试试楼上朋友1.4K吧。Top
14 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-03 09:32:30 得分 0
看看我写的udp的方法
http://community.csdn.net/Expert/topic/3515/3515059.xml?temp=.4931909Top
15 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-11-03 09:32:58 得分 0
别的不可能肯定是你处理的问题了Top
16 楼hedane(有球必应)回复于 2004-11-03 09:35:20 得分 0
分包就分包吧,接收事件里做好包的合并处理就行了,躲是躲不掉的。Top
17 楼dyhgoa(羚羊)回复于 2004-11-03 10:46:18 得分 0
我改成1K发送就OK了。Top




