何一方
计算机都可以收发数据。为了发送数据,需调用SendData方法。当接收数据时会发生DataArrival事件。调用DataArrival事件内的GetData方法就可获取数据。
2.2 创建一个TCP服务器(Socket服务器)
1)创建新项目。
在File菜单中单击New Project,打开New Project对话框,然后双击Standard EXE图标,即建立一个新项目,并进入开发环境。
2)将缺省窗体的名称改为frmServer。
将一个Winsock控件拖到窗体上,并将该控件的名字改为tcpServer。请注意其中的Protocol属性应为sckTCPProtocol。在窗体上添加两个TextBox控件。将第一个命名为txtSendData,第二个命名为txtOutput(如图2.1所示)。
(图2.1)
3)为窗体添加如下的代码。
Private Sub Form_Load()
''将LocalPort属性设置为整数后调用Listen方法。
tcpServer.LocalPort = 2000
tcpServer.Listen
End Sub
要创建服务器,首先设定一个服务器端口号,并开始侦听是否有客户请求连接。程序中,LocalPort属性为服务器端口号,最好大于1000,以避免冲突。另外,对于众所周知的端口号,我们称之为周知口,例如:端口80专用于Web服务。用Listen方法开始侦听。
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
''检查控件的State属性是否为关闭的。
''如果不是,在接受新的连接之前先关闭此连接。
If tcpServer.State <> sckClosed Then tcpServer.Close
''接受具有requestID参数的连接。
tcpServer.Accept requestID
End Sub
当客户连接到本服务器时,产生ConnectRequest事件,在事件中接收客户的请求。
程序中的requestID参数表示客户请求连接的ID号,Accept方法接收一个请求连接。
Private Sub txtSendData_Change()
''名为 txtSendData 的 TextBox 控件中包含要发送的数据。用户往文本框中
''键入数据时,使用 SendData 方法发送输入的字符串。
tcpServer.SendData txtSendData.Text
End Sub
当我们需要向客户发送数据时,只需要调用SendData方法。
程序中使用SendData方法发送数据。
Private Sub tcpServer_DataArrival (ByVal bytesTotal As Long)
''为进入的数据声明一个变量。
''调用GetData方法,并将数据赋予名为txtOutput的TextBox的Text属性。
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub
当客户向本服务器发送的数据到达后,产生DataArrival事件,在事件中接收数据。
程序中的bytesTotal参数表示收到数据的总数,GetData方法接收数据。
Private Sub tcpServer_close(Index as Integer)
tcpServer.Close
tcpServer.Listen
End Sub
当客户关闭连接时,服务器会产生Close事件。在事件中关闭当前连接,重新开始侦听。其中使用Close方法关闭连接。当然服务器也可以主动调用Close方法关闭连接,例如在窗体关闭时关闭连接。
Sub frmServer_UnLoad(Cancel As Integer