服务器端server.exe   客户端client.exe,在同一电脑上没有问题,但不同电脑有问题,连接不上的
以下是源码:
'client.exe
Private Sub Command1_Click()
   IsConnectionOpen = False
   Winsock1.Close
   Winsock1.RemoteHost = Text1   '填好Socket的对方地址
   Winsock1.RemotePort = 80    '及对方端口号
   Winsock1.Connect 'Socket发送联接请求,当联接成功时出发Winsock的Connect事件
   DoEvents  '等待连接处理(这里主要是考虑到远程的时候网络可能要等待)
   DoEvents  '等待连接处理(这里主要是考虑到远程的时候网络可能要等待)
      If Winsock1.State = sckConnected Then '连接上后
        Winsock1.SendData "client request"
      Else '连接不上,并且关闭SOCKS连接
        MsgBox "无法连接到服务器!"
        Winsock1.Close
        Exit Sub
      End If
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '每当有数据到达时
  Dim str As String
  Winsock1.GetData str '将接收的数据以字符串形式显示在接收显示框中
  Print str & IsConnectionOpen
  Winsock1.Close  '关闭socks
End Sub
'服务器端.
'如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法
'当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,
'可调用 ConnectionRequest 事件内的 Accept 方法。
Dim wArr()  As String
Dim IndexNumber As Integer
Dim SendStr As String
Dim minCanUseIndex As IntegerPrivate Sub Form_Load()
'读取加密狗数据
minCanUseIndex = 1
IndexNumber = 3000 '获得用户数=3000
ReDim wArr(IndexNumber, 0) As String
Winsock1(0).Protocol = sckTCPProtocol
Winsock1(0).LocalPort = 80
Winsock1(0).Listen
End Sub
Private Sub Winsock1_Close(Index As Integer)
On Error GoTo acd
wArr(Index, 0) = ""
Unload Winsock1(Index)
If minCanUseIndex >= IndexNumber Then
     MsgBox "服务端连接已满,请重启服务器1"
End If
If Index < minCanUseIndex Then
     minCanUseIndex = Index
End If
Exit Sub
acd:
End SubPrivate Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As IntegerIf Index = 0 Then '客户端要连接
   
    If minCanUseIndex < IndexNumber Then
        wArr(minCanUseIndex, 0) = Winsock1(0).RemoteHostIP
        Load Winsock1(minCanUseIndex)
        Winsock1(minCanUseIndex).Accept requestID
        Print "server accepted" & Index
        For i = minCanUseIndex + 1 To IndexNumber
               If wArr(minCanUseIndex, 0) = "" Then
                       minCanUseIndex = i
                       Exit For
               End If
        Next i
    Else
        MsgBox "服务端连接已满,请重启服务器"
    End If
End If
End SubPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long) '每当有数据到达时
  Dim str As String
  Winsock1(Index).GetData str '将接收的数据以字符串形式显示在接收显示框中
  If str = "client request" Then
         Print minCanUseIndex & str
         Winsock1(Index).SendData "send from server" & Index
  End If
  
End Sub

解决方案 »

  1.   

    将端口号Winsock1.RemotePort = 80改为Winsock1.RemotePort = 9001 试试 服务器段也得改为9001
      

  2.   

    在过程Winsock1_ConnectionRequest中加入
    Load Winsock1(minCanUseIndex)
    Winsock1(minCanUseIndex).LocalPort = 0
    Winsock1(minCanUseIndex).Accept requestID
    Winsock1(0).Close
    Winsock1(0).Listen
      

  3.   

    客户端连接上会有connect事件发生的,不要doevents,尤其是网络环境,doevents是你自己的计算机响应速度,和那没关系。
      

  4.   

    支持老大 mndsoft(枕善居(http://www.mndsoft.com/)
    有可能是防火墙引起的哦q