CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

同一台机器用Winsock通讯,怎么不行

楼主luckysym(热带风暴)2002-06-15 02:46:08 在 VB / 基础类 提问

本机IP为192.168.0.20  
  win2000sp1   +   VB6SP5  
  在同一VB程序中添加两个Winsock控件wsk1和wsk2,  
  wsk1.LocalPort   =   2000  
  wsk1.RemotePort   =   3000  
  wsk1.RemoteHost   =   192.168.0.20  
   
  wsk2.LocalPort   =   3000  
  wsk2.RemotePort   =   2000  
  wsk2.RemoteHost   =   192.168.0.20  
   
  执行  
  wsk1.SendData   "Hello"  
  wsk2的DataArrival事件未触发  
  而wsk1的DataArrival事件却接受到了"Hello"  
   
  而且,wsk1的两个端口值取任何合法的值,DataArrival事件都会响应  
  wsk2却始终无动于衷  
   
  同样,通一台机器上的两个VB程序用winsock控件UDP通信,  
  只有发送消息的控件才能收到消息。  
   
  不知为何?以前好像不是这样的。  
  问题点数:100、回复次数:16Top

1 楼didibaba(落花有意兮流水无情,郁闷!!!)回复于 2002-06-15 03:53:01 得分 10

一定可以的,只要是2个不同的端口。至于你的机器为什么不行,就不知道了。Top

2 楼shanhe(TNT)回复于 2002-06-15 08:38:24 得分 10

服务器端设定监听端口,但是客户端一定不要设定localport  
  Top

3 楼wmy997(柯南)回复于 2002-06-15 08:42:51 得分 10

试一试  
  wsk1.RemotePort   =   3000  
  wsk1.RemoteHost   =   "192.168.0.20"  
  wsk1.bind   2000,"192.168.0.20"  
   
  wsk2.RemotePort   =   2000  
  wsk2.RemoteHost   =   "192.168.0.20"  
  wsk2.bind   3000,"192.168.0.20"  
  Top

4 楼ywchen2000(灌水大帝:努力奋斗)回复于 2002-06-16 12:27:58 得分 10

可以通讯  
  我写个这样的程序  
  将协议该为UDP!  
  不需要BINDTop

5 楼daehappy(追求120%结贴)回复于 2002-06-16 18:26:16 得分 0

up!关注!Top

6 楼ywchen2000(灌水大帝:努力奋斗)回复于 2002-06-16 20:15:44 得分 10

private   command1_clicl()  
  winsock1.senddata   text2.text  
  endsub  
  private   sub   form_load()  
  winsock1.protocol=sckudpprotocol  
  winsock1.remotohost="202.201.10.21"  
  winsock1.localport=1011  
  winsock1.remoteport=1010  
  endsub  
  private   sub   winsock1_dattaarrival(byval   bytes   totol   as   long)  
  dim   data   as   string  
  winsock1.getdata   data,vbstring  
  text1.text=data+chr(13)+chr(10)+text1.text  
  endsub  
  程序二  
  private   sub   command2_click()  
  winsock1.seddata   text3.text  
  end   sub  
  private   sub   form_load()  
  winsock1.protocol=sckudppprotocol  
  winsock1.remotehost="202.10.1.11"  
  winsock1.localport=1010  
  winsock1.remoteport=1011  
  end   sub  
  private   sub   winsock1_dataarrival(byval   bytestotal   string)  
  dim   data1   as   string  
  winsock1.getdata   data1,vbstring  
  text2.text=data1+chr(13)+chr(10)+tex2.text  
  end   subTop

7 楼bestofbest(咖啡)回复于 2002-06-16 23:25:50 得分 10

应该可以  
  我以前就是在一台机器上实验我的程序  
  Top

8 楼luckysym(热带风暴)回复于 2002-06-18 00:46:52 得分 0

用bind   就搞定了Top

9 楼Boolean_true(李大嘴)回复于 2002-06-18 01:30:38 得分 10

一看就知道你用的是DUP   pro  
  DUP程序没有主客之分,只要指定对方的IP:port就可以发信一般情况下要绑定端口在发信之前先设置对方的IP:port  
  winsock.reHOST=""  
  winsock.reIP=port  
  winsock.SendData   Str  
  就可以了,  
  千万不要在reQuest()中加代码!  
  还有就是有可能你在senddata方法使用过程中有错误,  
  不过没关系,只要on   error   resume   next   就可以了,  
  祝你玩的开心,还有呀,  
  用DUP   不能得到对方的IP:port  
  所以,编写通讯程序时,可以在发送的信息是加入这些信息!  
  以便于对方程序给予回复!  
  你的代码我看过了,绑定一下再试一试吧!  
  祝你成功  
  Top

10 楼gys_yxr(毛毛)回复于 2002-06-18 12:12:44 得分 0

可以的我正在用Top

11 楼ywchen2000(灌水大帝:努力奋斗)回复于 2002-06-21 18:08:09 得分 0

upTop

12 楼AQS432(Sxj)回复于 2002-06-21 18:10:29 得分 10

应该行的呀  
  注意ip和端口值。Top

13 楼lonelystarcn(虫虫)回复于 2002-06-21 18:15:27 得分 10

UDP协议不存在服务端客户端,它是面向无连接的。  
  应当分别加上  
  wsk1.bind  
  wsk2.bind  
  Top

14 楼KAIBate(凯)回复于 2002-06-21 18:20:31 得分 0

UPUP!Top

15 楼sunxl(小呆)回复于 2002-06-21 18:22:30 得分 10

UDP   初步  
  创建   UDP   应用程序比创建   TCP   应用程序还要简单,因为   UDP   协议不需要显式的连接。在上面的   TCP   应用程序中,一个   Winsock   控件必须显式地进行“监听”,另一个必须使用   Connect   方法初始化连接。  
   
  UDP   协议不需要显式的连接。要在两个控件中间发送数据,需要完成以下的三步(在连接的双方):    
   
  将   RemoteHost   属性设置为另一台计算机的名称。  
   
   
  将   RemotePort   属性设置为第二个控件的   LocalPort   属性。  
   
   
  调用   Bind   方法,指定使用的   LocalPort。(下面将详细地讨论该方法。)    
  因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的。为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈。  
   
  要创建一个   UDP   伙伴,请按照以下步骤执行:    
   
  创建一个新的   Standard   EXE   工程。  
   
   
  将缺省的窗体的名称修改为   frmPeerA。  
   
   
  将窗体的标题修改为“Peer   A”。  
   
   
  在窗体中放入一个   Winsock   控件,并将其命名为   udpPeerA。  
   
   
  在“属性”页上,单击“协议”并将协议修改为   UDPProtocol。  
   
   
  在窗体中添加两个   TextBox   控件。将第一个命名为   txtSend,第二个命名为   txtOutput。  
   
   
  为窗体增加如下的代码。    
  Private   Sub   Form_Load()  
  '控件的名字为   udpPeerA  
  With   udpPeerA  
  '重点:必须将   RemoteHost   的值  
  '修改为计算机的名字。  
  .RemoteHost=   "PeerB"    
  .RemotePort   =   1001       '连接的端口号。  
  .Bind   1002                                 '绑定到本地的端口。  
  End   With  
  frmPeerB.Show                                   '显示第二个窗体。  
  End   Sub  
   
  Private   Sub   txtSend_Change()  
  '在键入文本时,立即将其发送出去。  
  udpPeerA.SendData   txtSend.Text  
  End   Sub  
   
  Private   Sub   udpPeerA_DataArrival   _  
  (ByVal   bytesTotal   As   Long)  
  Dim   strData   As   String  
  udpPeerA.GetData   strData  
  txtOutput.Text   =   strData  
  End   Sub  
   
  要创建第二个   UDP   伙伴,请按照以下步骤执行:    
   
  在工程中添加一个标准窗体。  
   
   
  将窗体的名字修改为   frmPeerB。  
   
   
  将窗体的标题修改为“Peer   B”。  
   
   
  在窗体中放入一个   Winsock   控件,并将其命名为   udpPeerB。  
   
   
  在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。  
   
   
  在窗体上添加两个   TextBox   控件。将第一个命名为   txtSend,第二个命名为   txtOutput。  
   
   
  在窗体中添加如下的代码。    
  Private   Sub   Form_Load()  
  '控件的名字为   udpPeerB。  
  With   udpPeerB  
  '重点:必须将   RemoteHost   的值改为  
  '计算机的名字。  
  .RemoteHost=   "PeerA"  
  .RemotePort   =   1002         '要连接的端口。  
  .Bind   1001                                 '绑定到本地的端口上。  
  End   With  
  End   Sub  
   
  Private   Sub   txtSend_Change()  
  '在键入后立即发送文本。  
  udpPeerB.SendData   txtSend.Text  
  End   Sub  
   
  Private   Sub   udpPeerB_DataArrival   _  
  (ByVal   bytesTotal   As   Long)  
  Dim   strData   As   String  
  udpPeerB.GetData   strData  
  txtOutput.Text   =   strData  
  End   Sub  
   
  如果要试用上面的例子,按   F5   键运行工程,然后在两个窗体的   txtSend   TextBox   中分别键入一些文本。键入的文字将出现在另一个窗体的   txtOutput   TextBox   中。  
   
  关于   Bind   方法  
  在上面的代码中,在创建   UDP   应用程序时调用了   Bind   方法,这是必须的。Bind   方法的作用是为控件“保留”一个本地端口。例如,如果将控件绑定到   1001   号端口,那么其它应用程序将不能使用该端口进行“监听”。该方法阻止其它应用程序使用同样的端口。  
   
  Bind   方法的第二个参数是任选的。如果计算机上存在多个网络适配器,可以用   LocalIP   参数来指定使用哪一个适配器。如果忽略该参数,控件使用的将是计算机上“控制面板”设置中“网络”控制面板对话框中列出的第一个适配器。  
   
  在使用   UDP   协议的时候,可以任意地改变   RemoteHost   和   RemotePort   属性,同时始终保持绑定在同一个   LocalPort   上。TCP   协议与此不同,在改变   RemoteHost   和   RemotePort   属性之前,必须先关闭连接。  
  Top

16 楼ywchen2000(灌水大帝:努力奋斗)回复于 2002-06-28 20:56:26 得分 0

接帐Top

相关问题

  • 如何用WINSOCK在用调制解调器连接两台WIN98的机器间通讯?
  • 如何用WINSOCK在用调制解调器连接两台WIN98的机器间通讯?
  • 如何实现20多台机器和一台机器同时通讯?
  • 请问两台机器的通讯问题。
  • dos 6.22的平台和98的平台的机器如何建立通讯?
  • 做socket通讯时,一台机器上有两块网卡,如何绑定?
  • 请问这样可以实现么?两台机器通讯问题??
  • 两台机器用串口怎么连接通讯,我怎么连了半天都连不通
  • UNIX与WINDOWS机器进行通讯?
  • UNIX与WINNT机器进行通讯?

关键词

  • 控件
  • 端口
  • winsock
  • 应用程序
  • 属性
  • 协议
  • 命名
  • 修改
  • 通讯
  • 连接

得分解答快速导航

  • 帖主:luckysym
  • didibaba
  • shanhe
  • wmy997
  • ywchen2000
  • ywchen2000
  • bestofbest
  • Boolean_true
  • AQS432
  • lonelystarcn
  • sunxl

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo