CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  网络编程

关于WINSOCK多重连接的一个问题

楼主chinasdust(我哦)2003-08-03 11:45:32 在 VB / 网络编程 提问

每一个winsock控件只能做一个连接么  
  我试图在连接过程中对winsock的remotehost赋值说明错误  
  我想建立一个几百个连接的server必须要用几百个winsock控件么  
  因为连接开始必须判断一下方是否在线,而且连接数据时都是献给对方一个信号  
  感觉能否动态改变winsock的remotehost值  
  谢谢 问题点数:0、回复次数:9Top

1 楼Fnems(Fnems)回复于 2003-08-03 12:02:59 得分 0

使用控件数组啊。Top

2 楼3661512(.Net)回复于 2003-08-03 12:43:52 得分 0

改变了remotehost值也没用,WINSOCK是用来通讯用的,当然要随时保持连接状态才能通信.  
  可以动态加载winsock控件,一个winsock专门用来监听,有一个连接请求就load   一个winsock控件,然后建立之间的连接.如果你确认两台机器间不需要通信了,可以先close,再连接其它机器.Top

3 楼chinasdust(我哦)回复于 2003-08-03 13:18:11 得分 0

我在form.load()中就把winsock     关闭了  
  动态加载怎么用Top

4 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-08-03 15:57:17 得分 0

winsock1(0).localport="3333"  
  winsock1(0).listen  
  for   i=1   to   10  
  load   winsock1(i)  
  nextTop

5 楼dyx(天火)回复于 2003-08-04 20:50:25 得分 0

接受多个连接请求  
  通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用   Accept   方法。  
   
  下面的代码假定名为   sckServer   的窗体上有一个   Winsock   控件,它的   Index   属性被设置为   0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量   intMax。在窗体的   Load   事件中,intMax   被设置为   0,数组中第一个控件的   LocalPort   属性被设置为   1001。然后调用控件的   Listen   方法,使之成为“监听”控件。在连接请求到达时,代码将检测   Index   是否为   0(“监听”控件的值)。如果为   0,监听控件将增加   intMax   的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。  
   
  Private   intMax   As   Long  
   
  Private   Sub   Form_Load()  
        intMax   =   0  
        sckServer(0).LocalPort   =   1001  
        sckServer(0).Listen  
  End   Sub  
   
  Private   Sub   sckServer_ConnectionRequest   _  
  (Index   As   Integer,   ByVal   requestID   As   Long)  
        If   Index   =   0   Then  
              intMax   =   intMax   +   1  
              Load   sckServer(intMax)  
              sckServer(intMax).LocalPort   =   0  
              sckServer(intMax).Accept   requestID  
              Load   txtData(intMax)  
        End   If  
  End   Sub  
   
  Top

6 楼heng_s(渣渣)回复于 2003-08-05 10:08:43 得分 0

你这样子用不了多久系统就要报内存不足了:)  
   
  Private   Sub   sckTax_ConnectionRequest(Index   As   Integer,   ByVal   requestID   As   Long)  
        Dim   I                     As   Integer  
        Dim   J                     As   Integer  
         
        I   =   sckTax.UBound  
        If   I   =   0   Then  
              J   =   I   +   1  
        Else  
              For   J   =   1   To   I  
                    If   sckTax(J).State   =   sckClosed   Then   Exit   For  
              Next   J  
        End   If  
        If   J   =   I   +   1   Then   Load   sckTax(J)  
        sckTax(J).Accept   requestID  
  End   SubTop

7 楼xdie(小蝶)回复于 2003-08-06 05:34:32 得分 0

作为一个折中考虑,可以将dyx(天火)朋友的  
  代码里加入一个常数MAX_CONTROL,其值为最多  
  可以load的控件个数。如果intMax   >   MAX_CONTROL  
  就使用heng_s(渣渣)提供的搜索方法搜索空闲的  
  winsock控件。如果仍未找到,则连接失败。  
  ;)Top

8 楼zjkuki(酷奇)回复于 2003-08-06 10:06:12 得分 0

在VB里用控件数组的很不爽,VB一个FORM里面最多只能放255个控件。也就是说可以做两百多个WINSOCK的连接Top

9 楼alicky(周松)回复于 2003-08-06 10:28:32 得分 0

Private   intMax   As   Long  
   
  Private   Sub   Form_Load()  
        intMax   =   0  
        sckServer(0).LocalPort   =   1001  
        sckServer(0).Listen  
  End   Sub  
   
  Private   Sub   sckServer_ConnectionRequest   _  
  (Index   As   Integer,   ByVal   requestID   As   Long)  
        If   Index   =   0   Then  
              intMax   =   intMax   +   1  
              Load   sckServer(intMax)  
              sckServer(intMax).LocalPort   =   0  
              sckServer(intMax).Accept   requestID  
              Load   txtData(intMax)  
        End   If  
  End   SubTop

相关问题

  • winsock连接问题
  • winsock连接错误
  • winsock连接问题?
  • Winsock为何不能连接
  • WINSOCK多连接问题
  • winsock连接数据库
  • winsock控件连接故障求教
  • 有关WINSOCK的连接问题
  • 一个Winsock的网络连接问题
  • Winsock多用户连接的问接!!!!!

关键词

  • 控件
  • winsock
  • 连接
  • 监听
  • 属性
  • 代码
  • intmax
  • sckserver
  • scktax
  • localport

得分解答快速导航

  • 帖主:chinasdust

相关链接

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

广告也精彩

反馈

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