CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  网络编程

关于使用Winsock控件客户端LocalPort必须为0的问题

楼主HtoFire(冬天里的一把火)2004-09-04 15:36:36 在 VB / 网络编程 提问

用Winsock控件编写一个TCP的程序,发现如果客户端的LocalPort不为0的话,下次再次连接,就会无法连接上服务器端。查阅了CSDN以前的帖子,发现是有好多人碰到过这个问题,设为0就解决了,可是为什么呢?还请大家指导。  
          下面是我程序的代码:  
  服务器端:  
  Private   Sub   cmdStart_Click()  
          If   cmdStart.Caption   =   "开始侦听"   Then  
                  cmdStart.Caption   =   "停止侦听"  
                  Me.Winsock1.LocalPort   =   4000  
                  Me.Winsock1.Listen  
                  Me.Caption   =   "正在侦听,请稍后……"  
          Else  
                  Me.Winsock1.Close  
                  cmdStart.Caption   =   "开始侦听"  
          End   If  
  End   Sub  
   
  Private   Sub   Winsock1_Close()  
          With   Winsock1  
                  If   .State   <>   sckClosed   Then   .Close  
                  .LocalPort   =   4000  
                  .Listen  
          End   With  
  End   Sub  
   
  Private   Sub   Winsock1_ConnectionRequest(ByVal   requestID   As   Long)  
          If   Me.Winsock1.State   <>   sckClosed   Then   Me.Winsock1.Close  
          Me.Winsock1.Accept   requestID  
  End   Sub  
   
  Private   Sub   Winsock1_DataArrival(ByVal   bytesTotal   As   Long)  
        '处理数据略  
  End   Sub  
   
  客户端:  
  Private   Sub   Command1_Click()  
          Me.Command1.Enabled   =   False  
          Me.Winsock1.RemoteHost   =   "127.0.0.1"  
          Me.Winsock1.RemotePort   =   4000  
          Me.Winsock1.Connect  
                   
          Me.Label1.Caption   =   "正在连接"  
  End   Sub  
   
  Private   Sub   Winsock1_Close()  
          Me.Label1.Caption   =   "连接已关闭"  
  End   Sub  
   
  Private   Sub   Winsock1_Connect()  
          Me.Label1.Caption   =   "已与服务器连接"  
          Me.Winsock1.SendData     aaa           '数据发送省略了,用变量aaa代替了  
  End   Sub  
   
  Private   Sub   Winsock1_DataArrival(ByVal   bytesTotal   As   Long)  
        '处理接收到数据  
  End   Sub  
   
  Private   Sub   Winsock1_SendComplete()  
            If   gstrTransmissionStatus   =   "OK"   Then  
                  Me.Label1.Caption   =   "传输完成"  
                  Me.Command1.Enabled   =   True  
            End   If  
  End   Sub  
   
  Private   Sub   Winsock1_SendProgress(ByVal   bytesSent   As   Long,   ByVal   bytesRemaining   As   Long)  
          If   gstrTransmissionStatus   =   "OK"   Then  
                  glngbytesToBeSend   =   glngbytesToBeSend   +   bytesSent  
                  Me.Label1.Caption   =   glngbytesToBeSend   &   "\"   &   UBound(gbytBuffer)  
          End   If  
  End   Sub  
   
  '以上有部分已经删掉了,但有关Winsock的都保留 问题点数:50、回复次数:9Top

1 楼Dickson(沧海冷心)回复于 2004-09-04 16:25:32 得分 10

这!~~~  
  不清楚~~~~  
  用API套结字。。。。。可能好点Top

2 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-09-04 16:29:40 得分 15

 
  Private   Sub   Winsock1_Close()  
          With   Winsock1  
                  If   .State   <>   sckClosed   Then   .Close  
                  ‘.LocalPort   =   4000'这里去掉就好了  
                  .Listen  
          End   With  
  End   SubTop

3 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-09-04 16:35:18 得分 0

Winsock控件编写一个TCP的程序,发现如果客户端的LocalPort不为0的话,下次再次连接,就会无法连接上服务器端。查阅了CSDN以前的帖子,发现是有好多人碰到过这个问题,设为0就解决了,可是为什么呢?还请大家指导  
  客户端的LocalPort不为0的话,就是不指定本地端口,好像tcp不能指定本地端口吧  
  Top

4 楼HtoFire(冬天里的一把火)回复于 2004-09-04 16:52:30 得分 0

to     zyg0(影子(努力吃饭中)):  
  注释到此句还是不行Top

5 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-09-04 17:18:43 得分 0

下次再次连接你   下次连接如果本地的另一个端口不关闭的话会出问题,必须关闭前一个,或者是设置另一个端口Top

6 楼zqfleaf(动力港湾)回复于 2004-09-06 16:09:28 得分 15

从你的描述应该是客户端的地址被占用了。  
  但是这种情况应该很少才对,因为按你的写法,应该是服务端的多,服务端应该用数组较好。  
   
  客户端:  
  Private   Sub   Command1_Click()  
          if   winsock1.state   <>sckclosed   then   winsock1.close  
          Me.Command1.Enabled   =   False  
          Me.Winsock1.RemoteHost   =   "127.0.0.1"  
          Me.Winsock1.RemotePort   =   4000  
          Me.Winsock1.Connect  
                   
          Me.Label1.Caption   =   "正在连接"  
  End   Sub  
  Top

7 楼HtoFire(冬天里的一把火)回复于 2004-09-06 17:00:51 得分 0

现在我不是想解决这个程序,而是想知道为什么客户端的LocalPort得设为0,当然从现象上看是客户端的本地端口被占用了,但服务器端的LocalPort设为非0是不会产生这种现像的。这是为什么呢?为会么客户端的LocalPort会被占用?是不是要在程序中释放啊?Top

8 楼zyg0(影子(被评为本年度最可爱流氓)回复于 2004-09-06 17:11:17 得分 0

不知道为什么,一直这样写Top

9 楼thbird(蝌蚪甲)回复于 2004-10-25 13:41:25 得分 10

接分!Top

相关问题

  • winsock控件
  • 用一个WINSOCK控件怎样接收多个客户端的请求?
  • winsock 控件 (c/s 客户端的询问信息服务期响应,有纰漏!)
  • 客户端控件的值
  • WINSOCK 控件问题
  • 有关winsock控件
  • winsock控件问题!
  • Winsock控件疑问……
  • 关于winsock控件
  • 关于Winsock控件

关键词

  • winsock
  • 客户
  • 控件
  • me
  • 端口
  • 连接
  • 服务器
  • 数据
  • 解决
  • winsock1

得分解答快速导航

  • 帖主:HtoFire
  • Dickson
  • zyg0
  • zqfleaf
  • thbird

相关链接

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

广告也精彩

反馈

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