建议你用动态控件数组,每一个WINSOCK只能进行一次通讯,如果要进行第二次通讯的话,那么重新LOAD一个,另外建议你用一个TIMER来监视WINSOCK的STATE是否为sckConnected?有问题的话,继续贴吧?我还在线!

解决方案 »

  1.   

    我现在的问题是,第一次都不能够连上。
    primmer,能帮我看看为什么嘛?谢谢了
      

  2.   

    为什么没有大虾帮我看看呢
    昨天等到凌晨三点多,睡觉的时候居然梦见有人对我说你这个问题解决不了。
    醒来发现居然果然是没有回贴。:(郁闷ing
      

  3.   

    你改一下port,改成1001试试.
    再加个err看看是什么情况
    Private Sub connect_Click()
    On Error Resume Next
       winsock1.Connect
    If Err Then
        MsgBox err.description 
    Exit Sub
    End If
      

  4.   

    while
    .....
    wend
    这个循环不需要吧.
      

  5.   

    你的服务器IP是否正确
    端口是否正确,他们都正确。看看你的网络配置主要是Tcp/Ip协议。
    我看你这段没有什么问题,要不你写一小段服务段程序与你现在的程序是否可以连接上。发现问题的所在
      

  6.   

    frandyyue,我照你的方法加了,可是每次一连接,就提示说:所需事物或请求的错误协议或连接状态:
    服务器那边的设置如下:
    localport 1001
    iisip  192.168.0.6
    controlserviceip   192.168.0.6
    controlserviceport  4000
    agentid  2
    dialoutwaittime 60
    我的代码:
    Private Sub connect_Click()    ' Winsockclient.connect
         '    Do Until Winsockclient.State = sckConnected
         'If Winsockclient.State = sckClosed Then
         'Exit Sub
         'End If
          'DoEvents
        'Loop
        On Error Resume Next
         Winsockclient.connect
        If Err Then
        MsgBox Err.Description
    End If
    Exit Sub
        End SubPrivate Sub send_Click()
    Winsockclient.SendData Text1.Text
    End Sub   Private Sub Form_Load()
         Winsockclient.RemotePort = 1001     Winsockclient.RemoteHost = "192.168.0.6"
             End Sub
        
        Private Sub Winsockclient_Close()     Winsockclient.Close     End    End Sub   
           Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)     Dim tmpstr As Integer     Winsockclient.GetData tmpstr     Textget.Text = tmpstr    End Sub
    实在看不出有什么错误呀   
     
     
      

  7.   

    pip;
    有两个地方:第一个是我现在的机器不能被局域网内的其他机器看到,但是我能够看到其他的机器。我第一次试验的时候,发现不能够连接,就把协议改了成udp了。
    第二个地方:我昨天自己写了一个服务器的程序,试过了,还是不能够连接,昨天我想完了,看来是我的客户端程序的问题,今天经你提醒,我发现可能是这个TCP/IP协议的问题吧。
    另外:我的服务器段和客户端程序都是在我的机器上用的,如果TCP/IP正常的话,是不是这个就没关系了?
      

  8.   

    我换了一台机器,但是还是不行啊。
    几乎想放弃了
    pipi,frand你们在不在啊?
      

  9.   

    我没有看到
    winsock.Listen这一句啊,好像你应该在伺服器端打开侦听,客户端才可以连接上的,还有,你如果第一次连接上了,你应该正常关闭端口,不然端口处在打开状态,你再去连接也会出现端口被占用的错误的。
    更详细的情况,你可以在msdn里面找到。
    不行直接将那个复制过来不就可以了吗?
      

  10.   

    Primer大虾,请问你的回复:
    每一个WINSOCK只能进行一次通讯,如果要进行第二次通讯的话,那么重新LOAD一个,另外建议你用一个TIMER来监视WINSOCK的STATE是否为sckConnected。为什么不可以在一次通讯的末尾用winsock.close事件关闭这个socket,在开头用一个判断语句:If winsock.state =sckclosed Then winsock.connect来打开呢?我的程序好像证明的确不能够这样做,为什么呢?那么如果要重新LOAD一下的话,该怎么做呢?
    如果这样做的话,那我是不是要用个动态数组控件?
    每次用过一个winsock之后关闭,然后再打开后一个?
    如果是这样,那要winsock.close这个事件有什么意义呢?只用一次就关掉了阿
    谢谢。
      

  11.   

    其实如果用的是TCP/IP协议,根本不用TIMER来监视,因为TCP/IP协议已经付出了昂贵的代价来维持这种连接,当连接好以后,任何一方终止连接(无论是异常终断还是调用CLOSE方法终断)另一方的CLOSE事件都将发生。还有就是Winsock并不是只能进行一次通讯,而是只能与一个Winsoick进行连接通讯。比如服务器要与多个客户机进行通讯就应该创建Winsock数组使每一个客户端都与一个Winsock保持连接。有一个问题我倒是奇怪:
    在我写的那个网络版软件中,当服务器安装在Win2000操作系统的计算机中时,所有安装在WIN9X下的客户程序均无法连接上,第一次也曾经连接上过。
    服务器安装在WINXP下也没有这种问题。
      

  12.   

    你地RemotePort设置正确么?
      

  13.   

    你用tcp/ip协议发送地化,服务器端必须在相应地端口侦听,就是winsock1.listen
      

  14.   

    那么,请问虫虫,为什么我这样做就发送不出去了呢:在一个send事件中,先SendData,然后关闭winsock,这时候,就什么也发不出去了,服务器端显示我这便是连上以后就立即退出了。在sendcomplte事件中关闭也是一样的结果。为什么呢?
      

  15.   

    这是在做多次发送时出现的问题,开始只做一次的时候没有关闭winsock,就可发送出去。
      

  16.   

    为了大家方便同步方式来传送数据,我写了一个客户端的DLL(VBSockDLL.dll),代码例子如下,专们用于与服务器的交互。
    需要的可以和我联系。
    Private Declare Function CloseSocket Lib "VBSockDLL.dll " (ByVal hSocket As Long) As Long
    Private Declare Function RecvData Lib "VBSockDLL.dll " (ByVal hSocket As Long, b As Any, ByVal nLen As Long) As Long
    Private Declare Function SendData Lib "VBSockDLL.dll " (ByVal hSocket As Long, b As Any, ByVal nLen As Long) As Long
    Private Declare Function ConnectServer Lib "VBSockDLL.dll " (ByVal strServerIp As String, ByVal nPort As Long) As Long
    Private Declare Function SetTimeOut Lib "VBSockDLL.dll " (ByVal nSec As Long) As Long
    Sub test1()
        Dim strData As String
        Dim nLen As Long
        Dim nRet As Long
        
        Dim hSocket As Long
        hSocket = ConnectServer("www.csdn.net", 80)
        If hSocket = -1 Then
            MsgBox "ConnectServer error"
            Exit Sub
        End If
        SetTimeOut (10)  '用于设置发送和接收数据的超时(秒),可以不用设置,默认为5秒
        
        strData = "GET / HTTP/1.1" + vbCrLf
        strData = strData + "Host: www.csdn.net" + vbCrLf + vbCrLf
        nLen = Len(strData)
        
        nRet = SendData(hSocket, ByVal strData, nLen)
        If nRet = -1 Then
            MsgBox "SendData error"
            Exit Sub
        End If
        nLen = 1000
        strData = Space(nLen)
        nRet = RecvData(hSocket, ByVal strData, nLen)
        If nRet = -1 Then
            MsgBox "RecvData"
            Exit Sub
        End If
        MsgBox strData
        CloseSocket hSocket
    End SubSub test2()
        Dim strData As String
        Dim nLen As Long
        Dim nRet As Long
        Dim b(1 To 100) As Byte
        
        Dim hSocket As Long
        hSocket = ConnectServer("www.csdn.net", 80)
        If hSocket = -1 Then
            MsgBox "ConnectServer error"
            Exit Sub
        End If
        SetTimeOut (10)  '用于设置发送和接收数据的超时(秒),可以不用设置,默认为5秒
        
        strData = "GET / HTTP/1.1" + vbCrLf
        strData = strData + "Host: www.csdn.net" + vbCrLf + vbCrLf
        
        nLen = Len(strData)
        For i = 1 To nLen
            b(i) = Asc(Mid(strData, i, 1))
        Next
        
        nRet = SendData(hSocket, b(1), nLen)
        If nRet = -1 Then
            MsgBox "SendData error"
            Exit Sub
        End If
        nLen = 100
        strData = Space(nLen)
        nRet = RecvData(hSocket, b(1), nLen)
        If nRet = -1 Then
            MsgBox "RecvData"
            Exit Sub
        End If
        CloseSocket hSocket
    End SubSub MAIN()
    test1    '用于传送字符串
    'test2     '用于传送数组(二进制数据)
    End Sub