在Timer触发事件中由WinSock服务器发信息,客户端接收不到,但也没有网络错误。为何?

starve 2003-12-24 01:24:15
我在同一台机子上调试客户端与服务端程序
服务端主要代码如下
Private Sub SerSock_Error(index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "net error"
End Sub

Private Sub Timer1_Timer()
。。。
SerSock(1).SendData SendStr
End Sub
症状:在SerSock(1).SendData SendStr之前检查网络状态为已连接,但客户端接收不到信息,如果在SerSock(1).SendData SendStr语句之前增加一个显示消息框的语句,让程序延迟一段时间,客户端就能接收到信息,这是为何,如不想增加消息框该如何解决?
...全文
37 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
horsefly 2004-01-15
  • 打赏
  • 举报
回复
你的Timer是多长时间执行一次?
在第一次执行完后SendStr是不是在哪里给清空了,而这时Timer并没有Stop所以第二次发的消息冲掉了第一次的消息。(如果客户端在接受消息时用DoEvents语句就会发生这种情况)。
你用消息框是因为这时由于消息框的弹出,系统这时处于等待消息框的回应状态,所以没有继续执行下去。这时客户端可以收到是正常的。
应该充分考虑当客户端接受到你的消息后需要多少时间来处理这条消息,只有到处理完成后发送第二条消息,这就需要你在发送下一条消息时有一个时间延时,要不客户端就做成多进程或线程的。
试着让timer的时间再长一点。

华芸智森 2004-01-15
  • 打赏
  • 举报
回复
对于这类问题的我的解决方法是:
有服务器端与客户端之间约定某个信号为收到信息后的信号,例如:"##OK".
当客户端收到服务器端发送的完整消息后,然后向服务器端面返回一个"##OK",
服务器端在收到该信号后再发送下一个消息.
yk84 2004-01-13
  • 打赏
  • 举报
回复
UP!
3661512 2004-01-03
  • 打赏
  • 举报
回复
用sleep函数延迟一下,服务端没有datearrive事件发生吗?
flc 2003-12-24
  • 打赏
  • 举报
回复
关注
学习
检查一下的客户端和服务器端的设置。
lazygod 2003-12-24
  • 打赏
  • 举报
回复
Sp5的补丁说明对一种情况作出了修正:当多个用户向服务器发送数据时,会产生只接受第一个用户数据的问题。
你的问题是否是因为这个原因?
lazygod 2003-12-24
  • 打赏
  • 举报
回复
你的VB打补丁包没?
starve 2003-12-24
  • 打赏
  • 举报
回复
给点意见!
starve 2003-12-24
  • 打赏
  • 举报
回复
按照我的程序流程,当前信息发送之前服务端只是接收了另一客户端的一条消息,我的程序已经对这条消息进行了处理,所以应该不会阻塞此次发送。
lazygod 2003-12-24
  • 打赏
  • 举报
回复
SendData在上一次数据发送未完成前,可能会阻塞此次发送。你最好是做应答,客户端收到数据后通知服务端,服务端再发送下一批数据。这也是更为安全的做法。另外,在WinSock控件的发送与接受上很容易犯常识性的错误,认为服务端发送一次,客户端接收一次。事实上两次或多次连续数据发送极有可能一次到达。情况如下:

比如一个sub内:
Server.SendData 1024个字节的数据
做一些处理,然后
Server.SendData 1024个字节的数据
sub结束

在客户端很可能就会一次收到2048个字节,而不是分两次各1024个字节。
我所能知道的也就这么多了。


starve 2003-12-24
  • 打赏
  • 举报
回复
我在SerSock(1).SendData SendStr之前增加了DoEvents语句,还是没有效果。
rainstormmaster 2003-12-24
  • 打赏
  • 举报
回复
加个延时函数试试

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧