基于VB Winsock 控件的聊天程序

今天充分利用网络资源,实现了局域网内的聊天程序.其实就是VB中的一个小控件-Winsock控件,Winsock使用了TCP协议和UDP协议,让本地计算机连接到远程的计算机上,在连接结束之前实时地进行数据交换.使用TCP协议时,需要创建一个客户端应用程序,就必须识别服务器的名称或IP地址.应用程序的通信端口随时都将仔细监测对方发出的消息,这是系统进行可靠的连接保证.一旦连接发生,任何一方都可以通过senddata发送和接收数据,并借助getdata把自己的数据分离出来。

这里我们需要创建两个应用程序,服务器应用程序和客户端应用程序.服务器首先创建一个服务端口号(最好大于2000),并且服务器的应用程序处于工作状态,确保进入监听状态,客户端的应用程序才能开始建立连接,进入正常的通信状态。
下面的程序主要实现了实时聊天的功能
1.下图为制作的服务端和客户端的界面。

2.此为运行后连接成功的界面。

3.实现聊天功能,成功聊天。

如下为代码

服务端:

Private Sub Command1_Click()
'发送
Winsock1.SendData Text1.Text
Text2.Text = Text2.Text + Chr(13) + Chr(10) + CStr(Date) + Chr(32) + CStr(Time$()) + Chr(13) + Chr(10) + "我:" & Text1.Text
Text1.Text = ""

End Sub

Private Sub Form_Load()
'端口设置
Winsock1.LocalPort = 2008
Winsock1.Listen
Label1.Caption = Label1.Caption + CStr(Winsock1.LocalIP)
Label2.Caption = Label2.Caption + CStr(Winsock1.LocalPort)
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer,Shift As Integer)
'按enter键发送数据
If KeyCode = 13 Then
Text2.Text = Text2.Text + Chr(13) + Chr(10) + CStr(Date) + Chr(32) + CStr(Time$()) + Chr(10) + "我:" & Text1.Text
Winsock1.SendData Text1.Text
Text1.Text = ""
End If
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
'连接
If Winsock1.State <> sckClosed Then
Winsock1.Close
Winsock1.Accept (requestID)
End If
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'接受
Beep
Dim strdata As String
Winsock1.GetData strdata
Text2.Text = Text2.Text + Chr(13) + Chr(10) + CStr(Data) + Chr(32) + CStr(Time$()) + Chr(13) + Chr(10) + Text3.Text & ":" & strdata

End Sub

客户端:

Private Sub Command1_Click()
'连接
Winsock1.RemoteHost = Text3.Text
Winsock1.RemotePort = Val(Text4.Text)
If Winsock1.State = sckClosed Then
Winsock1.Connect
Label4.Caption = "成功连接"
End If
End Sub

Private Sub Command2_Click()
'发送
Winsock1.SendData Text1.Text
Text2.Text = Text2.Text + Chr(13) + Chr(10) + CStr(Date) + Chr(32) + CStr(Time$()) + Chr(13) + Chr(10) + "我:" & Text1.Text
Text1.Text = ""

End Sub

Private Sub Command3_Click()
'退出
End
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer,Shift As Integer)
'按enter键发送数据
If KeyCode = 13 Then
Text2.Text = Text2.Text + Chr(13) + Chr(10) + CStr(Data) + Chr(32) + CStr(Time$()) + Chr(13) + Chr(10) + "我:" & Text1.Text
Winsock1.SendData Text1.Text
Text1.Text = ""
End If
End Sub


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '接收 Beep Dim strdata As String Winsock1.GetData strdata Text2.Text = Text2.Text + Chr(13) + Chr(10) + Text5.Text & ":" & strdata End Sub

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...