救命啊,好几天没解决,winsock的问题(附源码)

szjia345 2007-12-23 09:14:30
Private Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)tcpServer(Index).GetData clientDat, vbString
If Left(clientDat, 3) = "用户名" Then
....
exit sub
end if

If InStr(clientDat,"|##676#5#") > 0 Then
rsA = Split(clientDat, "##676#5#")
' Debug.Print clientDat
Set iRe = New ADODB.Recordset
With iRe
.Open "select * from chat", cn, 1, 3

.AddNew

.Fields("word") = rsA(1)
.Fields("time") = rsA(2)
.Update
End With
end sub
'发送的是 senddata= "|##676#5#" & trim(text1.text) & "|##676#5#" & date()

在局域网中运行正常.但到广域网中就运行错误,好象只取得一段数据,时间出错了
我不知如何写,谢高手指点!!
谢谢!
...全文
46 点赞 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
taojm 2008-03-04
1,广域网容易丢包建议使用tcpip协议不要用udp
2,每个封包希望前缀是总体长度,最后用vbcrlf隔开,这样你可以使用len()来判断是否是符合要求的封包。
回复
junki 2007-12-25
广域网中,数据阻塞比较严重,况且要看数据是否接收完整
建议定义一个数据缓存区来接收所有数据,然后通过协议分析数据的完整性和安全性
回复
jf110 2007-12-25
明显是延迟的问题,接收的数据不一定是完整的,加个判断比较好,

比如在数据结尾加"<ok>"标示,以数据首部判断常会出错

时间错那是肯定的,date() 得到是接收端的时间,不是发送端的,
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7451

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告