第一节:Winsock控件的介绍
Winsock控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等……
废话不多说,来看看他有些什么重要的属性、方法和事件吧!
VB6.0中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择[部件],然后在部件对话框中选择"Microsoft Winsock Control 6.0",后确定即可。如果没有这个复选框的话,请点击[浏览]按钮后在打开的[添加ActiveX控件]对话框选择后选择打开,再点确定即可。Winsock控件在工具箱中图标为
Winsck的主要属性:
属性名
说明
BytesReceived
浏览器的activex控件
返回接收的数据,可以用GetData方法来获取它
LocalHostName
返回本机名
LocalIP
返回本机IP
LocalPort
返回或设置本机所用的端口,如果为0则为随机产生
Protocol
返回通信所用的协议
RemoteHostName
返回通信对方的计算机名
RemoteHostIP
返回通信对方的IP
State
返回Winscok的当前状态,取值如下
sckClosed(常量为0):关闭状态
sckOpen(常量为1):打开状态
sckListening(常量为2):侦听状态
sckConnectionPending(常量为3):连接状态
sckResolvingHost(常量为4):解析主机中
sckHostResolved(常量为5):已解析主机
sckConnecting(常量为6):正在连接
sckConnected(常量为7):已经连接
sckClosing(常量为8):客户端正在关闭
sckError(常量为9):连接发生错误
Winsock的主要方法:
方法名
作用
listen
使服务器程序处于侦听状态,等待客户端的连接请求
connect
用于客户端向远程发送一个连接请求,语法:t [IP,Port]
Accept
用于服务器接收一个远程客户端的连接请求,语法:Winsock.Accept requestID
sendData
用于向远程发送数据,语法:Winsock.sendData 数据
getData
用于接收远程发送来的数据,语法:Data 变量
Close
关闭通信
Winsock的主要事件:
事件名
说明
Connect
当服务器接收客户端请求时,服务端发生的事件
DataArrival
有数据到达时发生的事件,可以在这个事件中来getData发送来的数据
ConnectionRequest
客户端用Connect方法时服务器发生的事件,可以在这个事件中来Accept一个连接请求
SendProgress
发送数据中发生的事件,可以在这个事件中来标示当前已经发送多少数据
SendComplete
发送数据完成发生的事件
Error
通信发生错误时发生的事件
Close
关闭通信时发生的事件
这节我们详细介绍了Winsock控件的属性、方法和事件等,只要拥有这些,我们就可以编很多功能强大的软件了。在接下来的几课中我们将以实例来说明Winsock的应用。
第二节:Winsock聊天器实例
上一节我们介绍了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
服务器设计第三、四步的实现(WinsockConnect):
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文件(名为:),然后新建一个工程以制作客户端。
客户端的制作:
界面如下:
客户端设计第一、二、三步的实现:
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文件(名为:)。这样一个聊天器就做好了,在本机也可以试试,运行方法是先打开,后打开,然后在点击连接按钮,连接地址为"127.0.0.1",确定,然后在下面的文本框输入内容点发送按钮即可。在建立连接后的操作方法和的操作方法一样。试试吧!
最后说一句:实际上我们会发现这样的聊天器怎么会分为两个部份呢,这样多不方便。实际上我们可以合成一个,即在一个窗体上放一个wskServer再放一个wskClient,这样就OK了,这里是为了更好的说明就放分成两个的。还有就是这个聊天器是基于TCP协议,这个协议保证了通信的数据不会丢失,这个协议只能一对一,但在实际中我们聊天的对象不会
是一个人吧,这样就要用到可以一对多但不保证数据能完全到达UDP协议了,简单而言TCP用于一对一,而UDP可以运用于一对多。下一节我们将介绍用Winsock制作一个简单的Web服务器。
第三节:Winsock制作Web服务器
在本节中,我们将制作一个简单的Web服务器(点击这里下载源文件)。
按上节的说法,我们可以把Web服务器看是一个服务端,而浏览器则是一个一个的客户端,他们以一个相同的端口(如HTTP默认为80FTP默认为21),所以就能通信。他们的工作流程大概如下:首先Web服务器在某一端口上等待浏览器的连接,然后浏览器向目标Web服务器发出要求浏览某一网页的请求,最后Web服务根据请求发送相应的网页源文件给浏览器。
用过ASP的都知道,我们有一个Web服务器叫IIS,这个服务器就是根据浏览器的请求而产生相应的源码然后发送到用户的浏览器上的。
别的不多说,界面很简单:
将文本框设置可以显示多行文本。为了有别于其他,我们这个Web服务器将使用端口124。制作流程如下:
Form_Load事件中将服务器的侦听端口设为124

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。