Private Sub Form_Load()
If Winsock1.State <> sckClosed Then
Winsock.Close
End If
  Winsock1.Connect "192.168.1.11", 4000  '这样就可以。 'Winsock1.Connect "129.95.56.83", 4000  '如果改成这样测试不能通讯的
MsgBox Winsock1.LocalIP
End Sub

解决方案 »

  1.   

    内网不能直接连另一个内网的电脑,必须要通过一个有公网IP的服务器连接打洞后才能互连......或一个有公网IP,内网的机器主动连公网IP的电脑,然后两台电脑就可以通信
    以下是引用别人的话...
    我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入互联网。互联网上有一台服务器S。 
        现在AB是无法直接和对方发送信息的,AB都不知道对方在互联网上真正的IP和端口, AB所在的局域网的路由器只允许内部向外主动发送的信息通过。对于B直接发送给A的路由器的消息,路由会认为其“不被信任”而直接丢弃。 
        要实现 AB直接的通讯,就必须进行以下3步:A首先连接互联网上的服务器S并发送一条消息(对于UDP这种无连接的协议其实直接初始会话发送消息即可),这样S就获取了A在互联网上的实际终端(发送消息的IP和端口号)。接着 B也进行同样的步骤,S就知道了AB在互联网上的终端(这就是“打洞”)。接着S分别告诉A和B对方客户端在互联网上的实际终端,也即S告诉A客户B的会话终端,S告诉B客户A的会话终端。这样,在AB都知道了对方的实际终端之后,就可以直接通过实际终端发送消息了(因为先前双方都向外发送过消息,路由上已经有允许数据进出的消息通道)
      

  2.   

    非常感谢。
    顺便请教wo22ni,如何有效地获取各用户的真正终端呢?
      

  3.   

    给Winsock服务端所在内网的路由器添加一个服务,IP和端口指向Winsock服务器的IP和端口,如果这个路由器的外网IP为129.95.56.83,那么只要其它局域网内可以上公网的机器,就可以通过这个IP访问Winsock服务器......
      

  4.   

    我也正在做这个远程通讯程序,通过设置路由器做一端的DMZ,远端就可以直接通过这台路由的公网IP访问了.
      

  5.   

    服务器的IP填写局域网IP,在路由里映射端口.客户端设置为外网 ip