【机房收费】What is WinSock?

来源:互联网 发布:如何追妹子知乎 编辑:程序博客网 时间:2024/06/18 18:35

【背景】在开始机房收费之前,跑到数据库里面去看了看:


这是登录机房收费系统之后,自动获取的计算机名。

当时比较奇怪,它是怎么获取的

后来在网上寻找答案,可以使用代码实现,但是在寻找过程中发现了一个控件:WinSock


What?

WinSock控件对用户不可视,就像Timer控件一样,你引用之后,在操作界面是看不到的。

通过设置它的一些属性和调用方法,可以很容易的进行远程计算机并进行双向的数据交换。


How?

在弄清楚如何使用它之前,我们先来看看它都有哪儿些属性:

1,Protocol属性

通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。WinSock控件默认协议是TCP。

2,SocketHandle属性

返回当前socket连接的句柄,这是只读属性。

3,RemoteHostIP属性

返回远程计算机的IP地址。在客户端,当使用了控件的Connect方法后,远程计算机的IP地址就赋给了RemoteHostIP属性,但是服务器端,当ConnectRequest事件后,远程计算机的IP地址就赋给了这个属性。(有点儿懵逼对吧?其实我也不太懂。先放下不懂的,解决当前的)

4,ByteReceived属性

返回当前接收缓冲区的字节数

5,State属性

返回winsoc控件当前的状态

6,RemoteHost属性

远程机器名

7,LocalHostName

本地机器名(机房收费系统中,使用的就是这个属性)


WinSock控件的主要方法:

1,Bind方法

用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序不能再使用这个端口。

2,Listen方法

只在使用TCP协议时有用,将应用程序置于监听检测状态

3,Connect方法

当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法

4,Accept方法

当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的请求

5,SendData方法

当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。

6,GetData方法

当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。

它从缓冲区中取得最长为maxLen的数据,并以type类型存放在data中,GetData取得数据后,就把相应的缓冲区清空。

7,PeekData方法

和GetData方法类似,但PeekData在取得数据后并不把缓冲区清空。


WinSock控件主要事件:

1,ConnectRequest事件

当本地计算机接收到远程计算机发送的连接请求时,控件的ConnectRequest事件将会被触发

2,SendProgress事件

当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将被触发。SendProgress事件记录了当前状态下已发送的字节数和剩余字节数

3,SendComplete事件

当所有数据发送完成时,被触发

4,DataArrival事件

当建立连接后,接受到了新数据就会触发这个事件。

但是要注意的是,如果在接受到新数据前,缓冲区中非空,就不会触发这个事件

5,Error事件

在工作中发生任何错误都会触发这个事件。


Finally:

没想到,一个小小的WinSock控件,竟然有这么多的小知识点~


感谢您的阅读~