关于Winsock接受数据的问题 你是用TCP/IP协议的吗?我以前也是这样哦。不知道为什么…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为winsock 控件在收到一定数据后才发生一次DataArrival事件,所以有这样的结果了 最好在每接收完一次数据后把winsock重新load一次,这样应该可以清掉上次接收的数据。 但我不是用load做的,还有其他的办法吗? 你在局域网上试过吗?我以前写过很多Winsock程序,不过都是局域网的,没出现过这些情况啊。如果局域网没问题,那就是网络问题,在接收到信息时将数据置空即可。 to DaNivava(大泥娃娃) : 我在局域网没什么问题,但是连在公网这种情况会阶段性的出现,我觉得可能是置后的问题,你认为呢? 在winsock进行通讯的时候,客户端发送一个sendata str_1,那么服务器端则收到一个SockTcpServer_DataArrival事件。 如果客户端两次发送的时间过短,那么服务器端则认为是一次发送。 一般来说,我们都在通讯的字符串的两都加有标志位,在服务器端再拨取有用的数据,如果出现这种情况,那么就会很麻烦。比如对话的通讯模式是 pd{+对话的内容+}pde,那么拨取后的结果 对话的内容。 但如果发生上面的情况 则出现 pd{+对话的内容1+}pdepd{+对话的内容2+}pde,拨取后得到对话的内容1+}pdepd{+对话的内容2,有一部分标志就被留在了有用的内容里面,如果传送的是一些纯数字的信息,那么问题可能就会更大。我的解决办法: getdata str_1后,我调用一个函数 dostr(str_1)来处理这个函数。Private Sub dostr(str_1 As String)''''''.....变量声明略 int_End_1 = InStr(1, str_Subjs, "+}PDE") '得到 +}PDE 的位置 If int_End_1 + 4 = Len(str_Subjs) Then '如果这是字符串的结束,那么什么都不做 'Do Nothing Else str_2 = Right(str_1, Len(str_1) - (int_End_1 + 4)) '如果不是,那么得到从开始到一个结束位的字符串,赋给str_2 Call dostr(str_2, Numj) '递归调用dostr End If''''''''''''''''''''你的处理语句,这样就可以分开像上面的问题了End Sub to : iambluebird(胡搅蛮缠) 请问“str_Subjs”这个变量代表什么? 我也遇过你的问题,我用两个winsock来轮流发送,问题就解决了。 其实这个问题是解决不了的.你试试连续执行两次Winsock1.SendDate "A"那一定会一次性收到"AA" to hyryxgs(菜鸟) : 解决不了,不会吧,为什么我在同一个局域网内一直是能够按我的意图工作的呢? 只是通过公网就不可以,我觉得是延时的问题 不过很奇怪:我今天在局域网内也发生了这样的问题 不知你能解答一下这方面的问题吗? 如果客户端两次发送的时间过短,那么服务器端则认为是一次发送。要解决这个问题,可以在两次发送之间插入一条命令:doevents包你管用! 用VB做游戏,用哪种脚本好点 如何用ADO创建一个新的MDB数据库 不好意思又要麻烦大家了! 请问在MDI窗口中,打开可多个子窗口,怎么把下面的窗口激活? 选择listview多行 一个概念问题 为什么single类型的相加减以后都成了整数 vba如何判断text文件是否被打开? Mod函数的限制 ####高手请进,有高分### 急急,上午就要用,大家幫幫忙了!!!!!! VB中有这样的函数吗?
我在局域网没什么问题,但是连在公网这种情况会阶段性的出现,我觉得可能是置后的问题,你认为呢?
如果客户端两次发送的时间过短,那么服务器端则认为是一次发送。
一般来说,我们都在通讯的字符串的两都加有标志位,在服务器端再拨取有用的数据,如果出现这种情况,那么就会很麻烦。比如对话的通讯模式是 pd{+对话的内容+}pde,那么拨取后的结果 对话的内容。
但如果发生上面的情况 则出现 pd{+对话的内容1+}pdepd{+对话的内容2+}pde,拨取后得到对话的内容1+}pdepd{+对话的内容2,有一部分标志就被留在了有用的内容里面,如果传送的是一些纯数字的信息,那么问题可能就会更大。我的解决办法:
getdata str_1后,我调用一个函数 dostr(str_1)来处理这个函数。Private Sub dostr(str_1 As String)
''''''.....变量声明略 int_End_1 = InStr(1, str_Subjs, "+}PDE") '得到 +}PDE 的位置
If int_End_1 + 4 = Len(str_Subjs) Then '如果这是字符串的结束,那么什么都不做
'Do Nothing
Else
str_2 = Right(str_1, Len(str_1) - (int_End_1 + 4)) '如果不是,那么得到从开始到一个结束位的字符串,赋给str_2
Call dostr(str_2, Numj) '递归调用dostr
End If''''''''''''''''''''你的处理语句,这样就可以分开像上面的问题了
End Sub
请问“str_Subjs”这个变量代表什么?
那一定会一次性收到"AA"
解决不了,不会吧,为什么我在同一个局域网内一直是能够按我的意图工作的呢?
只是通过公网就不可以,我觉得是延时的问题
不过很奇怪:我今天在局域网内也发生了这样的问题
不知你能解答一下这方面的问题吗?
包你管用!