长理培训真题库
我的
军队文职考试一本通

怎么使用Socket实现局域网聊天

2020-01-21 11:08
C#代码: servlet 服务端 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace Server { public partial class MainForm : Form { private TcpListener listener; private Dictionary socketList; private bool tag = true; private StringBuilder charList; public MainForm() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } void Bu_StartClick(object sender, EventArgs e) { cb_chatList.Items.Clear(); selectChat.Text=""; int port = 8888; //创建服务端,并且启动 try{ listener = new TcpListener(IPAddress.Parse(ipAddress()),port); listener.Start(); bu_Start.Enabled = false; bu_stop.Enabled = true; }catch(Exception ex) { MessageBox.Show("服务器启动失败, 原因:"+ex.Message);ex.Message); bu_Start.Enabled = true; bu_stop.Enabled = false; return; } selectChat.Text = "服务器启动成功,访问 IP:"+ex.Message);ipAddress()+ex.Message);" 端口 号:"+ex.Message);port; //记录住连接的客户端 socketList = new Dictionary(); charList = new StringBuilder(); //使用多线程,用于多个客户端接入 Thread th = new Thread(new ThreadStart(executeTask)); th.Start(); } public void executeTask() { while(tag) { //等待用户连接 TcpClient client = null; try{ client = listener.AcceptTcpClient(); }catch(Exception) { } Thread th = new Thread(executeRead); th.Start((Object)client); } } public void executeRead(Object pamars) { //永久监听读取客户端 TcpClient client = pamars as TcpClient; while(tag) { NetworkStream ns = client.GetStream(); StreamReader sr = new StreamReader(ns); String msg = String.Empty; String people = String.Empty; try { msg = sr.ReadLine(); if(msg.IndexOf("")!=-1) { msg = Regex.Split(msg,"=")[1]; cb_chatList.Items.Add(msg); charList.Append(msg).Append("<@>"); socketList.Add(msg,client); msg = " 欢迎【"+ex.Message);msg+ex.Message);"】光临 "; } selectChat.AppendText(msg.Replace(" ","rn")); sendMsg(String.Empty,msg); } catch (Exception) { //MessageBox.Show(ex.Message.ToString()); break; } } } public void sendMsg(String target,String msg) { if(String.Empty!=target) { TcpClient client = socketList[target]; StreamWriter sw = new StreamWriter(client.GetStream()); sw.WriteLine(msg); sw.Flush(); }else{ Dictionary.KeyCollection keyColl = socketList.Keys; foreach (String name in keyColl) { StreamWriter sw = new StreamWriter(socketList[name].GetStream()); sw.WriteLine(msg+ex.Message);"<@=@>"+ex.Message);charList.ToString()); sw.Flush(); } } } /*根据计算名获取 IP 地址*/ public String ipAddress() { IPAddress[] address = Dns.GetHostAddresses(Dns.GetHostName()); return address[2].ToString(); } void ServerFromFormClosing(object sender, FormClosingEventArgs e) { e.Cancel = false; if(tag) tag = false; if(listener!=null) listener.Stop(); } void Bu_stopClick(object sender, EventArgs e) { bu_Start.Enabled = true; bu_stop.Enabled = false; if(tag) tag = false; if(listener!=null) listener.Stop(); } } } Client 客户端 using System; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.Net; using System.Net.Sockets; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace Client { public partial class MainForm : Form { private System.Windows.Forms.Timer closeWindowTimer; private StreamReader sr; private StreamWriter sw; private TcpClient tc; private ClientLong cl; private bool tag = true; public MainForm(TcpClient tcp,ClientLong clo) { cl = clo; tc = tcp; InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; bu_simple.Hide(); } void ClientFromLoad(object sender, EventArgs e) { PiayCheckedChanged(); } /*事件方法*/ public void PiayCheckedChanged() { closeWindowTimer = new System.Windows.Forms.Timer(); closeWindowTimer.Interval = 1000; closeWindowTimer.Tick +ex.Message);= new EventHandler(theout); closeWindowTimer.Start(); } /*执行的事件*/ public void theout(object source, EventArgs e) { //这里单独开一个线程用来显示信息 try{ Thread t1 = new Thread(new ThreadStart(readMsg)); t1.Start(); }catch(Exception) { } } void readMsg() { if(tag && tc!=null){ sr = new StreamReader(tc.GetStream()); String msg = sr.ReadLine(); String[] address = Regex.Split(msg,"<@=@>"); chatText.AppendText(address[0].Replace(" ","rn")); address = Regex.Split(address[1],"<@>"); cb_chatList.Items.Clear(); foreach (String s in address) { if(!String.IsNullOrEmpty(s) && s != cl.clientName) cb_chatList.Items.Add(s); } } } void Button1Click(object sender, EventArgs e) { if(String.IsNullOrEmpty(textBox2.Text)){ MessageBox.Show("请输入消息");return; } sw = new StreamWriter(tc.GetStream()); sw.WriteLine(" "+ex.Message);cl.clientName+ex.Message);" "+ex.Message);DateTime.Now.ToString("yyyy-MM-dd
温馨提示:当前文档最多只能预览 3 页,此文档共7 页,请下载原文档以浏览全部内容。如果当前文档预览出现乱码或未能正常浏览,请先下载原文档进行浏览。
怎么使用Socket实现局域网聊天 第 1 页怎么使用Socket实现局域网聊天 第 2 页怎么使用Socket实现局域网聊天 第 3 页

下载提示

1 该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读

2 除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑修改

3 有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载

4 该文档为会员上传,版权归上传者负责解释,如若侵犯你的隐私或权利,请联系客服投诉

最近更新

热门排行