懂Winsock的来一下!

我用Winsock控件编了个聊天程序,在自己家里同一路由器上能连接上,但传到别人家的电脑就连接不上了,请问该怎么办?
服务端:
Private Sub Form_Load()
Winsock1.LocalPort = 1024
Winsock1.Listen
End Sub

客户端:
Private Sub Command1_Click()
On Error Resume Next
Winsock1.RemoteHost = 192.168.1.1
Winsock1.RemotePort = 1024
Winsock1.Connect
End Sub
好不好建立一个虚拟局域网呢?

服务器端有问题。我一开始学习编程的时候也有这样的毛病。就是当服务器端收到连接请求的时候应该怎么办?应该接受连接请求。加上

'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态

Private sub tcpclient_connectionrequest(Byval requestID as long)

If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭

Tcpserver.close '

Tcpserver.accept requestID '

End if

End sub

还有就是要提醒你的就是。连接的两台机器应该都在公网上。或者是在同一个局域网里。要不然是不能连接的。QQ就是用了特殊的方法让居于网上的主机接受请求。

这是我在网络上查的一个例子 你看看

连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的 dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:

private sub tcpclient_dataarrival(byval bytestotal as long)

dim x as string

tcpclient.getdata x '使用getdata获得发送来的数据

.......

End sub

后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。

三、编写服务器端程序

先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。

当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:

'在窗体的load事件中对tcpserver控件进行初始化

private sub form_load()

tcpserver.localport=1001

tcpserver.listen '把服务器置于监听检测状态

end sub

'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态

Private sub tcpclient_connectionrequest(Byval requestID as long)

If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭

Tcpserver.close '

Tcpserver.accept requestID '

End if

End sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-12-24
因为你用的是内网的IP 192.168.x.x
人家只有一台电脑用的是外网IP
你们的IP都不是一个等级的所以用不了的!
你那个也只能在自己的局域网用了!
第2个回答  2007-12-23
不是程序的问题,你们应该使用对方能够看到的公网IP,那样就可以了
防火墙也得关上
第3个回答  2007-12-24
你把IP 改成127.0.0.1试一下如果能连上,就是ip问题
相似回答