栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#使用Socket实现局域网聊天

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#使用Socket实现局域网聊天

本文实例为大家分享了C#使用Socket实现局域网聊天的具体代码,供大家参考,具体内容如下

先运行一个java写的局域网聊天,效果图如下

后使用c#图形修改如下:

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); 
 bu_Start.Enabled = true; 
 bu_stop.Enabled = false; 
 return; 
      } 
      selectChat.Text = "服务器启动成功,访问IP:"+ipAddress()+" 端口号:"+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 = "
欢迎【"+msg+"】光临
"; } 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+"<@=@>"+charList.ToString()); sw.Flush(); } } } 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 += 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("
"+cl.clientName+"  "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"
 "+textBox2.Text); textBox2.Text = ""; sw.Flush(); } void Bu_exitClick(object sender, EventArgs e) { MainFormFormClosing(null,null); } void Button2Click(object sender, EventArgs e) { chatText.Text = ""; } void MainFormFormClosing(object sender, FormClosingEventArgs e) { closeWindowTimer.Stop(); cl.Close(); tag = false; if(sr!=null) sr.Close(); if(sw!=null) sw.Close(); } void Bu_simpleClick(object sender, EventArgs e) { String selected = cb_chatList.Text; if(selected==null) { MessageBox.Show("请选择单聊对象"); return; } } } }

补充:

1.上传下载文件、聊天表情、私聊、踢人.......都是可以扩展的功能。

只是目前还没有可执行的思路,希望有相同爱好者多多提出宝贵意见,我会继续关注。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号