VB.net做的一个简单的聊天的例
发布时间:2020-12-17 08:18:58 所属栏目:百科 来源:网络整理
导读:- pre name="code" class="vb"服务端:'用vb.net做一个简单的聊天工具,可以实现群发的Imports System.ThreadingImports System.NetImports System.Net.SocketsPublic Class Form1 Dim ListenSocket As New Socket(AddressFamily.InterNetwork,SocketType.Str
-
<pre name="code" class="vb">服务端: '用vb.net做一个简单的聊天工具,可以实现群发的 Imports System.Threading Imports System.Net Imports System.Net.Sockets Public Class Form1 Dim ListenSocket As New Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp) '创建监听的套接字 Dim Dict As New Dictionary(Of String,Socket) '用于保存连接的客户的套接字的键值对集合 Dim DictThre As New Dictionary(Of String,Thread) '用于保存通信线程的键值对集合 Private Sub ButListen_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles ButListen.Click '开始监听的按钮 TextBox.CheckForIllegalCrossThreadCalls = False '取消文本框的跨线程检查 Dim Address As IPAddress = IPAddress.Parse(TxtIP.Text.Trim) Dim EndPoint As New IPEndPoint(Address,TxtPort.Text) '创建一个网络节点对象 ListenSocket.Bind(EndPoint) '给负责监听的套接字绑定一个网络节点 ListenSocket.Listen(2) ShowMsg("正在监听……") Dim thre As New Thread(AddressOf Connect) '创建一个新的线程用于处理客户端发来的连接请求 thre.IsBackground = True '设为后台线程 thre.Start() '开启线程 End Sub Sub Connect() '处理客户端的连接请求的过程 While True Dim SockConect As Socket = ListenSocket.Accept ShowMsg("连接成功!" & "(连接信息:" & SockConect.RemoteEndPoint.ToString & ")") Dict.Add(SockConect.RemoteEndPoint.ToString,SockConect) '将连接成功的套接字添加到键值对集合 LBOnLine.Items.Add(SockConect.RemoteEndPoint.ToString) '添加到列表 Dim Thre As New Thread(AddressOf RecClient) '创建一个新的线程用于和链接成功的套接字通信 Thre.IsBackground = True '设为后台线程 Thre.Start(SockConect) DictThre.Add(SockConect.RemoteEndPoint.ToString,Thre) '将创建的通信线程添加到键值对集合 End While End Sub Sub RecClient(ByVal SockTelNet As Socket) '处理客户端发来的数据 While True Dim AryMsg(1024) As Byte Dim RecLen As Int32 Try '捕获异常 RecLen = SockTelNet.Receive(AryMsg) '接受客户端发来得信息 Catch ss As SocketException ShowMsg(ss.NativeErrorCode & vbCrLf & ss.Message) '显示错误信息 Dict.Remove(SockTelNet.RemoteEndPoint.ToString) '移除断开连接的套接字 LBOnLine.Items.Remove(SockTelNet.RemoteEndPoint.ToString) '从列表中移除 Return Catch s As Exception ShowMsg(s.Message) Return End Try Dim StrMsg As String StrMsg = System.Text.Encoding.UTF8.GetChars(AryMsg,RecLen) ShowMsg("接收:" & StrMsg) End While End Sub Sub ShowMsg(ByVal Msg As String) '显示信息 TxtMsg.AppendText(Format(DateTime.Now,"F") & vbCrLf & " " & Msg & vbCrLf & vbCrLf) 'TxtMsg用途显示消息记录 End Sub Sub SendMsg(ByVal Msg As String) '发送信息 Dim AryMsg() = System.Text.Encoding.UTF8.GetBytes(Msg) Try '捕获异常 Dict(LBOnLine.SelectedItem).Send(AryMsg) '给选中用户发送消息 Catch ss As SocketException ShowMsg(ss.NativeErrorCode & vbCrLf & ss.Message) Return Catch s As Exception ShowMsg(s.Message) Return End Try ShowMsg("发送:" & Msg) End Sub Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click 'Button1发送消息的按钮 SendMsg(TxtSendMsg.Text) '发送消息 End Sub Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button2.Click 'Button2群发的按钮 For Each a In Dict.Values '遍历通信套接字键值对集合,群发消息 Dim AryMsg() = System.Text.Encoding.UTF8.GetBytes(TxtSendMsg.Text.Trim) Try '捕获异常 a.Send(AryMsg) '发送消息 Catch ss As SocketException ShowMsg(ss.NativeErrorCode & vbCrLf & ss.Message) Catch s As Exception ShowMsg(s.Message) End Try Next ShowMsg("群发:" & TxtSendMsg.Text.Trim) End Sub End Class '客户端: '客户端和服务端发送和接收数据的处理基本一样的,只是一个是主动连接的,一个是被动连接的 Imports System.Net Imports System.Net.Sockets Imports System.Threading Public Class Form1 Dim SockClient As New Socket(AddressFamily.InterNetwork,ProtocolType.Tcp) '穿件一个 Private Sub ButListen_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles ButListen.Click TextBox.CheckForIllegalCrossThreadCalls = False '取消文本框的跨线程检查 Dim Address As IPAddress = IPAddress.Parse(TxtIP.Text.Trim) Dim Endpoint As New IPEndPoint(Address,TxtPort.Text) Try '捕获异常 SockClient.Connect(Endpoint) '发起连接 Catch ss As SocketException ShowMsg(ss.Message) Return Catch s As Exception ShowMsg(s.Message) Return End Try ShowMsg("连接成功!") Dim Thre As New Thread(AddressOf RecMsg) '创建接收数据的线程 Thre.IsBackground = True Thre.Start() End Sub Sub RecMsg() '接受数据处理 While True Dim AryMsg(1024) As Byte Dim RecLen As Int32 Try '捕获异常 RecLen = SockClient.Receive(AryMsg) Catch ss As SocketException ShowMsg(ss.Message) Return Catch s As Exception ShowMsg(s.Message) Return End Try Dim StrMsg As String StrMsg = System.Text.Encoding.UTF8.GetChars(AryMsg,"F") & vbCrLf & Msg & vbCrLf) End Sub Private Sub ButSendMsg_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles ButSendMsg.Click SendMsg(TxtSendMsg.Text.Trim) End Sub Sub SendMsg(ByVal Msg As String) '发送数据 Dim AryMsg() = System.Text.Encoding.UTF8.GetBytes(Msg) Try '捕获异常 SockClient.Send(AryMsg) Catch ss As SocketException ShowMsg(ss.Message) Return Catch s As Exception ShowMsg(s.Message) Return End Try ShowMsg("发送:" & Msg) End Sub End Class '这个简单的例子就到这了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |