现在的位置: 首页 > 综合 > 正文

基于VB Winsock 控件的聊天程序

2013年09月03日 ⁄ 综合 ⁄ 共 2411字 ⁄ 字号 评论关闭

                 

            今天充分利用网络资源,实现了局域网内的聊天程序.其实就是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

 

 

 

 

抱歉!评论已关闭.