winsock UDP无法bind(实时错误'87'),真诚求帮助!

wangjie1986 2008-04-02 12:05:21


服务器端程序:
Private Sub Form_Load()
UDPserver.Bind 5000
End Sub
Private Sub Form_Terminate()
UDPserver.Close
End Sub
Private Sub UDPserver_DataArrival(ByVal bytesTotal As Long)
Dim message As String
UDPserver.GetData message
txtOutput.Text = message & vbCrLf
End Sub
Private Sub cmdSend_Click()
UDPclient.SendData txtSend.Text
'txtOutput.Text = textoutput.Text & "Sent message : " & txtSend.Text & vbCrLf
txtSend.Text = ""
End Sub
客户端程序:
Private Sub Form_Load()

UDPclient.RemotePort = 5000
UDPclient.RemoteHost ="localhost"
UDPclient.RemotePort = 5000
End Sub
Private Sub Form_Terminate()
UDPclient.Close
End Sub
Private Sub UDPclient_DataArrival(ByVal bytesTotal As Long)
Dim message As String
'UDPclient.GetData message
txtOutput.Text = message & vbCrLf
End Sub
这个程序不管是服务器端还是客户端运行起来都会有错误,都是bind错误,要么就是senddata错误,请问是哪有问题,郁闷了好长时间,看了好多帖子都不明白!还望各位不吝赐教!,在此多谢各位了!!!
...全文
476 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjie1986 2008-04-03
  • 打赏
  • 举报
回复
对了,有时会出现这样的情况,就是我第一次点启动它提示错误,然后进入中断模式,提示我是结束还是调试的时候我点调试,而后我在点启动就可以运行了,只要不关闭工程它就可以运行,但是当我将它编译我.exe时就运行不了,或者当我保存这个工程,关闭它,然后在次打开工程它就又无法运行了, 并且不管怎么改端口它都无法运行!
wangjie1986 2008-04-03
  • 打赏
  • 举报
回复
我把所有的杀毒软件和防火墙都关了,可它就是提示bind错误!!!也许我的机子,运行不了!!不过还是谢谢各位了,我 会给分的
zzyong00 2008-04-02
  • 打赏
  • 举报
回复
把你的防火墙关了试试
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
我编译运行 1,2,通讯正常。

1,你确定你编译的两个程序都remoteport到对方bind的端口上了。
2,在同一台机器上,一个port不能同时被两个程序bind(包括vb的调试工程)
wangjie1986 2008-04-02
  • 打赏
  • 举报
回复
疯了,我可是照着你的代码写的,可是点启动后就显示实时错误('87')bind错误,不管怎么改端口号都不行!!!
luxingchang_2008 2008-04-02
  • 打赏
  • 举报
回复
学习一下
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
THE cptName 换成你计算机的名字
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
在command1_click中加一句
text1.text=text1.text & text2.text & vbcrlf
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
一个winsock1,两个textbox,text1(接收信息),text2(发送信息)
form_load:
with winsock1 '程序1,-----把remoteport和bind的端口调换一下,编译成 程序2 即可
.remotePort=1333
.remotehost=THE cptName
.bind 1999
end with
command1:
winsock1.senddata text2.text
text2.text=""


winsock1_dataArrival:
dim mystr
winsock1.getdata mystr
text1.text=text1.text & mystr & vbcrlf
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
我那代码就可以调试通过
wangjie1986 2008-04-02
  • 打赏
  • 举报
回复
发疯了,怎么都不行,老是提示bind那个地方有什么实时错误('87'),怎么改端口都不行,看了msdn的一个例子照着做了,可是只能运行一遍,并且只要生成工程就打不开又提示什么实时错误!!!!!,我想不是端口问题吧,我都改了好多了,各位能给一个实际的简短的,两个工程的例子可以实际生成运行的(在一台机上)不胜感激!!!!!!
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
当然,udp程序的远程连接端口和本地端口是可以设置为同一个端口的
但是在同一台机子上是不允许的。
forbearORfolie 2008-04-02
  • 打赏
  • 举报
回复
UDP是不分服务和客户端的,其他地方代码全部相同
form_load中修改

with winsock1 '程序1
.remotePort=1333
.remotehost=THE cptName
.bind 1999
end with

with winsock1 '程序2
.remotePort=1999 ’这个地方要调换一下
.remotehost=THE cptName
.bind 1333 ’2个程序都要连接到对方bind的端口上
end with
嗷嗷叫的老马 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangjie1986 的帖子:]
看了好多帖子都不明白
[/Quote]

翻了下MSDN,搜索"使用 Winsock 控件",里面有详细的解说及代码.

MSDN里面还是讲得非常清楚的.

别告诉我你没装.
嗷嗷叫的老马 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangjie1986 的帖子:]都是bind错误[/Quote]

这个一般是BIND的端口被占用.

看看换个端口吧.

另外你这代码貌似搞反了.

"客户端"看起来是接收消息的,那才应该BIND一个端口.

然后你这"服务器端"应该把远程端口设置为客户端BIND的端口,IP设为客户端所在IP.

想双向通信,两边都要有发送的代码,并且不需要两个WINSOCK.

服务器端程序:
Private Sub Form_Load()
UDPclient.RemotePort = 5000
UDPclient.RemoteHost ="localhost"
End Sub

客户端程序:
Private Sub Form_Load()
UDPclient.Bind 5000
End Sub

7,785

社区成员

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

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