Private Sub Form_Load()
INTMAX1 = 0
tcpserver(0).ListenEnd Sub
Private Sub tcpserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Text1 = INTMAX1
INTMAX1 = INTMAX1 + 1
Load tcpserver(INTMAX1)tcpserver(INTMAX1).Accept requestID
INTMAX1 = INTMAX1 + 1
End Sub
连接第一个用户没事,连接第二个用户就在Load tcpserver(INTMAX1)这一行出360错,对象已加载,为什么啊?

解决方案 »

  1.   

    INTMAX1 怎么家那么多次?  是不是以前没有 unload
      

  2.   

    所有代码都在这里,INTMAX1加一次也是一样的报错,所以就多加一次试试.
      

  3.   

    Public STR As String
    Public INTMAX As String
    Private Sub Form_Load()
    INTMAX = 0
    tcpserver(0).Listen
    End Sub
    Private Sub tcpserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    INTMAX = INTMAX + 1
    Load tcpserver(INTMAX)
    tcpserver(INTMAX).Accept requestID
    End Sub
    Private Sub tcpserver_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Dim STR As String
    tcpserver(Index).GetData STR
    Text1 = Text1 + STR
    For i = 1 To INTMAX
    If (tcpserver(i).State = sckConnected) Then
    Debug.Print i
    tcpserver(i).SendData STR
    End If
    Next
    End Sub
    为什么这么简单的问题这么久才有人回答呢=。=```,谢谢上面这位大虾了,现在代码改成了这样,发现Debug.Print i能得到所有在连接状态的编号,但是客户端只有最后登陆的那个才能收到消息呀???
      

  4.   

    但是客户端只有最后登陆的那个才能收到消息呀???   ==================================================================================
    看看你服务器发送数据的代码,你服务器发送数据的WINSOCK(???).SENDDATA...........
      

  5.   

    这句写在for循环里,当编号i连通时就发数据不对吗?
    那应该改成什么样啊?
    小弟水平有限,不甚理解,请麻烦把正确代码贴一下.
      

  6.   

    没见过你这样的代码,winsock里面是不能用listen的socket来发送和接受的,必须用accept返回的socket才行
      

  7.   

    回楼上:
    load tcpserver(INTMAX)
    tcpserver(INTMAX).Accept requestID
    这句不是accept的吗?
      

  8.   

    tcpserver(0)是侦听的呀,不参与接发数据的呀,参与接发数据的是控件组的呀~
    为什么啊~~快来高手呀~~这可是按教程写的呀~~
      

  9.   

    楼主,怎么说你好雷~~Private Sub Form_Load()
       intMax = 0
       tcpServer(0).LocalPort = 1001
       tcpServer(0).Listen
       Debug.Print "开始侦听.."
    End SubPrivate Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
       If Index = 0 Then
          intMax = intMax + 1
          Load tcpServer(intMax)
          tcpServer(intMax).LocalPort = 0
          tcpServer(intMax).Accept requestID
          Debug.Print "创建新的连接" & intMax & ",端口在" & tcpServer(intMax).LocalPort
       End If
    End SubPrivate Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        Dim strData As String
        tcpServer(Index).GetData strData
        Debug.Print "第" & Index & "号服务器连接接收到信息:" & strData
    End Sub你的问题在于处理tcpserver_ConnectionRequest事件的时候,没有判断Index=0,因为这里tcpserver(0)永远处在侦听状态,当有新的连接请求时,就新创建一个tcpserver,并使用随机端口来接受连接,所以记住,只有在tcpserver(0)接收到连接请求时才intMax=intMax+1
      

  10.   

    非常感谢楼上深夜回答我的问题,我以前是有 If Index = 0 Then这句的,但是发现连接一个用户第二个就连不上了,所以就把他去掉了,我也试了楼上的代码,发现还是没解决问题,结果和我贴子上的一样,虽然服务端都能print出来,但是只有最后一个用户能接收到消息,我是做flash的,这个是想做一个简单的flash结合vb的聊天室程序,源代码下载:http://xyzflash.googlepages.com/222.rar,希望有高手能最终解决我的问题,也欢迎和我交流,我qq是32719767,只有晚上在线,白天用skype,帐号是xxxyyyzzzhi,真心寻求答案!
      

  11.   

    我用程序测试正常,没有使用你提供的那个flash
      

  12.   

    难道是flash的问题?看来得去flash 区问了.
      

  13.   

    Public INTMAX As String  '有这句不错才怪Public INTMAX As Integer
      

  14.   

    改完之后去掉多于的INTMAX =INTMAX +1
      

  15.   

    Public INTMAX As String  '这句确实写错了^_^,不过改了之后还是一样的效果(不管有没有If Index = 0 Then都不行)...
    另外,这句INTMAX =INTMAX +1怎么会多余呢,去掉会报错的呀,对象已经加载...555555555
      

  16.   

    楼主实在对不住,刚弄明白你想问什么。你是想要服务端同时给所有客户端发送吗?代码如下:
    Private Sub txtSendData_Change()
        Dim i As Long
        For i = 1 To intMax
            DoEvents   '这个DoEvents一定要加
            tcpServer(i).SendData txtSendData.Text
        Next
    End Sub你没加那个DoEvents吧,加上试试,循环发送得用DoEvents