(紧急求助!!!)关于Winsock控件奇怪的问题……

isostar 2002-04-04 08:01:45
‘请看下面的代码:
Private Sub Form_Load()
With Winsck
.LocalPort = 1001
.Bind 1001
.RemoteHost = .localhost
.RemotePort = 1002
.SendData “hi”
End With
End Sub

Private Sub Winsck_DataArrival(ByVal bytesTotal As Long)
dim Tem as string
msgbox"有信息到来!"'用于判断是否收到信息
End Sub
'运行后,弹出了“有信息到来!”的对话框……
'虽然Remotehost 为本机,但是Remoteport不是Localport,却收到了来自本机的消息
'但是有时,又收不到该信息……是否是Winsock控件性能不稳定?
'请问大虾,这是为什么?
'小弟先谢了
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
isostar 2002-04-06
  • 打赏
  • 举报
回复
Private Sub Form_Load()
With Winsock1
.LocalPort = 1001
.Bind 1001
.RemoteHost = .LocalHostName
.RemotePort = 1002
.Winsock1.SendData "hi"
End With
with winsock2
.LocalPort = 1002
.Bind 1002
.RemoteHost = .LocalHostName
.RemotePort = 1002
end with

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Tem As String
MsgBox "winsock1接收到消息" '用于判断是否收到信息
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim Tem As String
MsgBox "winsock2接收到消息" '用于判断是否收到信息
End Sub
;运行后,为何我收到的信息为“winsock1接收到消息”而不是“winsock2接收到消息”,为什么?
iambluebird 2002-04-04
  • 打赏
  • 举报
回复

Private Sub Form_Load()
With Winsock1
.LocalPort = 1001
.Bind 1001
.RemoteHost = .LocalHostName
.RemotePort = 1002
.Winsock1.SendData "hi"
End With
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Tem As String
MsgBox "有信息到来!" '用于判断是否收到信息
End Sub

上面应该是localhostname吧,没有localhost这个属性啊
你发出的信息当然会返回到本地断口来,看下面这几句:

.LocalPort = 1001 '本地监听断口1001
.Bind 1001 ' 使用UDP协议,绑定到1001断口上
.RemoteHost = .LocalHostName 'winsock的localhostname属性是获得本地机器的ip地址或机器名,并赋值给本WINSOCK控件的远程IP属性
.RemotePort = 1002 '远程机器断口为1002,发送信息到这个断口
.Winsock1.SendData "hi" '发送信息

而整个程序(就你提供的代码来看)只有一个WINSOCK控件,你发送信息和接受信息都是用的这一个WINSOCK空间,首先它被绑定到了1001断口,发送信息,这是正确的也不会出问题,但并没有一个真正意义上的远程断口在监听1002断口,无法接受信息(你的.RemoteHost=.LocalHostName把远程机器定义为了本地机器),WINSOCK能够检测到断口缓冲里接受到了信息,但由于并不市绑定到1002断口的,没办法读出这个本不属于自己的信息!!

这也就能解释你所说的不稳定了,我测试了一下,如果使用了winsock1.getdata Tem 然后再msgbox Tem 这样会出错的,原因就是winsock本来监听1001断口,本身并没有获得信息,获得信息的只是1002断口,防在缓冲里,断口为1001的winsock1并不能使用getdata把他读出来!


isostar 2002-04-04
  • 打赏
  • 举报
回复
且不理server 或者client,我只是搞不懂,远程端口不等于本地端口,为什么发出的消息却返回到本地来?
wanglf1977 2002-04-04
  • 打赏
  • 举报
回复
还有一点,你可以用msgbox显示接收的数据。
wanglf1977 2002-04-04
  • 打赏
  • 举报
回复
不知道你写的是客户端呢还是服务器端。我认为,如果是客户端,不需要添加localport 属性,只需要设置remotehost 和remoteport就可以了。

1,451

社区成员

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

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