上一节我们介绍了Winsock控件,这节我们将以一个聊天器的实例来说说如何应运Winsock控件进行计算机之间的通信。
我也做了一个聊天器,程序点击这里下载。
这节课我们做了用于通信的服务端和客户端,在制作他们之前,先看看服务端和客户端是如何设计的:(注:要复制本页代码时要注意去掉不正确的字符如?号)
服务端的设计:
1、设置好localPort作为侦听端口
2、使用listen使服务端处在侦听状态
3、客户端发出连接请求后触发ConnectionRequest事件
4、在ConnectionRequest中用Accept方法来接收客户端的连接请求
5、收发数据
客户端的设计:
1、设置RemoteHost,即你要连接IP
2、设置好RemotePort,即通信的端口号,要与服务端的一致
3、使用Connect方法向服务端发出连接请求
4、如果服务端同意连接请求则触发Connect事件
5、收发数据
服务端的制作:
界面如下:
服务器设计第一、二步的实现(窗体的Load事件):
Private Sub Form_Load()
wskServer.LocalPort = 1024 ' 1、设置好localPort作为侦听端口
wskServer.Listen ' 2、使用listen使服务端处在侦听状态
End Sub
服务器设计第三、四步的实现(Winsock的Connect):
Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)
If wskServer.State <> sckClosed Then
wskServer.Close '这里要先关闭,要不会报错
wskServer.Accept requestID ' 4、在ConnectionRequest中用Accept方法来接收客户端的连接请求
End If
End Sub
服务器设计第五步的实现:
Private Sub cmdSend_Click()
wskServer.SendData txtMessage.Text '发送数据
txtContent.Text = vbCrLf & txtContent.Text & "我说:" & txtMessage.Text '加到聊天记录中
txtContent.Text=""
End Sub
Private Sub wskServer_DataArrival(ByVal bytesTotal As Long)
Dim tempS As String
wskServer.GetData tempS '接收数据
txtContent.Text = txtContent.Text & "对方说:" & tempS & vbCrLf '加到聊天记录中
End Sub
将上面的程序生成一个EXE文件(名为:Server.exe),然后新建一个工程以制作客户端。
客户端的制作:
界面如下:
客户端设计第一、二、三步的实现:
Private Sub cmdConnect_Click()
Dim IP As String
IP = InputBox("请输入要连接的IP", "输入的IP", "127.0.0.1") '连接的IP默认为本机
wskClient.RemoteHost = IP '1、设置RemoteHost,即你要连接IP
wskClient.RemotePort = 1024 '2、设置好RemotePort,即通信的端口号,要与服务端的一致
wskClient.Connect '3、使用Connect方法向服务端发出连接请求
cmdConnect.Enabled = False
End Sub
客户端设计第五步的实现(发送和接收代码和服务器一致,只不过控件名不同而已):
Private Sub cmdSend_Click()
wskClient.SendData txtMessage.Text '发送数据
txtContent.Text = vbCrLf & txtContent.Text & "我说:" & txtMessage.Text '加到聊天记录中
txtContent.Text=""
End Sub
Private Sub wskClient_DataArrival(ByVal bytesTotal As Long)
Dim tempS As String
wskClient.GetData tempS '接收数据
txtContent.Text = txtContent.Text & "对方说:" & tempS & vbCrLf '加到聊天记录中
End Sub
生成EXE文件(名为:Client.exe)。这样一个聊天器就做好了,在本机也可以试试,运行方法是先打开Server.exe,后打开Client.exe,然后在Client.exe点击连接按钮,连接地址为"127.0.0.1",确定,然后在下面的文本框输入内容点发送按钮即可。在建立连接后Server.exe的操作方法和Client.exe的操作方法一样。试试吧!
最后说一句:实际上我们会发现这样的聊天器怎么会分为两个部份呢,这样多不方便。实际上我们可以合成一个,即在一个窗体上放一个wskServer再放一个wskClient,这样就OK了,这里是为了更好的说明就放分成两个的。还有就是这个聊天器是基于TCP协议,这个协议保证了通信的数据不会丢失,这个协议只能一对一,但在实际中我们聊天的对象不会是一个人吧,这样就要用到可以一对多但不保证数据能完全到达UDP协议了,简单而言TCP用于一对一,而UDP可以运用于一对多。下一节我们将介绍用Winsock制作一个简单的Web服务器。
|