1、Csharp局域网聊天系统多人聊天(C#.Socket).using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Threading;using System.Net.Sockets;using System.Net;namespace Chat_Server/ / Form1 的摘要说明。/ public class Form1 : System.Windows
2、.Forms.Form/ / 必需的设计器变量。/ private System.ComponentModel.Container components = null;static int listenport=6666;Socket clientsocket;private System.Windows.Forms.ListBox lbClients;ArrayList clients;private System.Windows.Forms.Button button1;Thread clientservice;private System.Windows.Forms.Label labe
3、l1;Thread threadListen;public Form1()InitializeComponent();/ / 清理所有正在使用的资源。/ protected override void Dispose( bool disposing )if( disposing )if(clientservice != null)clientservice.Abort();if(threadListen != null)trythreadListen.Abort();catch(Exception ex)threadListen = null;if (components != null) c
4、omponents.Dispose();base.Dispose( disposing );#region Windows 窗体设计器生成的代码/ / 设计器支持所需的方法 - 不要使用代码编辑器修改/ 此方法的内容。/ private void InitializeComponent()this.lbClients = new System.Windows.Forms.ListBox();this.button1 = new System.Windows.Forms.Button();this.label1 = new System.Windows.Forms.Label();this.Su
5、spendLayout();/ / lbClients/ this.lbClients.ItemHeight = 12;this.lbClients.Location = new System.Drawing.Point(16, 24);this.lbClients.Name = lbClients;this.lbClients.Size = new System.Drawing.Size(184, 268);this.lbClients.TabIndex = 0;/ / button1/ this.button1.Location = new System.Drawing.Point(272
6、, 56);this.button1.Name = button1;this.button1.TabIndex = 1;this.button1.Text = button1;this.button1.Click += new System.EventHandler(this.button1_Click);/ / label1/ this.label1.Location = new System.Drawing.Point(240, 136);this.label1.Name = label1;this.label1.Size = new System.Drawing.Size(120, 32
7、);this.label1.TabIndex = 2;this.label1.Text = label1;/ / Form1/ this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);this.ClientSize = new System.Drawing.Size(368, 309);this.Controls.Add(this.label1);this.Controls.Add(this.button1);this.Controls.Add(this.lbClients);this.Name = Form1;this.Text = F
8、orm1;this.Load += new System.EventHandler(this.Form1_Load);this.ResumeLayout(false);#endregion/ / 应用程序的主入口点。/ STAThreadstatic void Main() Application.Run(new Form1();private void StartListening() TcpListener listener = new TcpListener(listenport);listener.Start();label1.Text = listening.;while (true
9、) trySocket s = listener.AcceptSocket(); clientsocket = s; clientservice = new Thread(new ThreadStart(ServiceClient); clientservice.Start(); catch(Exception ex)MessageBox.Show(listening Error: +ex.Message);private void ServiceClient() Socket client = clientsocket; bool keepalive = true; while (keepa
10、live) Byte buffer = new Byte1024; int bufLen = 0;trybufLen = client.Available ;client.Receive(buffer,0,bufLen,SocketFlags.None); if(bufLen=0)continue;catch(Exception ex)MessageBox.Show(Receive Error:+ex.Message);return;string clientcommand = System.Text.Encoding.ASCII.GetString(buffer).Substring(0,b
11、ufLen); string tokens = clientcommand.Split(new Char|); Console.WriteLine(clientcommand); if (tokens0 = CONN) for(int n=0; nclients.Count;n+) Client cl = (Client)clientsn; SendToClient(cl, JOIN| + tokens1); EndPoint ep = client.RemoteEndPoint; Client c = new Client(tokens1, ep, clientservice, client
12、); string message = LIST| + GetChatterList() +/r/n; SendToClient(c, message); clients.Add(c); lbClients.Items.Add(c); if (tokens0 = CHAT) for(int n=0; nclients.Count;n+) Client cl = (Client)clientsn; SendToClient(cl, clientcommand); if (tokens0 = PRIV) string destclient = tokens3; for(int n=0; nclie
13、nts.Count;n+) Client cl = (Client)clientsn; if(cl.Name.CompareTo(tokens3) = 0) SendToClient(cl, clientcommand); if(cl.Name.CompareTo(tokens1) = 0) SendToClient(cl, clientcommand); if (tokens0 = GONE) int remove = 0; bool found = false; int c = clients.Count; for(int n=0; nclients.Count;n+) Client cl
14、 = (Client)clientsn; SendToClient(cl, clientcommand); if(cl.Name.CompareTo(tokens1) = 0) remove = n; found = true; lbClients.Items.Remove(cl); if(found) clients.RemoveAt(remove); client.Close(); keepalive = false; private string GetChatterList()string result = ;for(int i=0;iclients.Count;i+)result +
15、= (Client)clientsi).Name+|;return result;private void SendToClient(Client cl,string clientCommand)Byte message = System.Text.Encoding.ASCII.GetBytes(clientCommand);Socket s = cl.Sock;if(s.Connected)s.Send(message,message.Length,0);private void Form1_Load(object sender, System.EventArgs e)clients = n
16、ew ArrayList();private void button1_Click(object sender, System.EventArgs e)threadListen = new Thread(new ThreadStart(StartListening);threadListen.Start(); /* client类 */* 放于 chatServer 项目中 */using System; using System.Threading; namespace Chat_Server using System.Net.Sockets; using System.Net; / / C
17、lient 的摘要说明。 / public class Client private Thread clthread; private EndPoint endpoint; private string name; private Socket sock; public Client(string _name, EndPoint _endpoint, Thread _thread, Socket _sock) / TODO: 在此处添加构造函数逻辑 clthread = _thread; endpoint = _endpoint; name = _name; sock = _sock; pub
18、lic override string ToString() return endpoint.ToString()+ : + name; public Thread CLThread getreturn clthread; setclthread = value; public EndPoint Host getreturn endpoint; setendpoint = value; public string Name getreturn name; setname = value; public Socket Sock getreturn sock; setsock = value; /
19、* chatClient */using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.IO;using System.Net;using System.Net.Sockets;using System.Threading;namespace Chat_Client/ / Form1 的摘要说明。/ public class Form1 : System.Windo
20、ws.Forms.Formprivate System.Windows.Forms.CheckBox checkBox1;private System.Windows.Forms.StatusBar statusBar1;NetworkStream ns;StreamReader sr;TcpClient clientsocket;bool connected;Thread receive;string serveraddress = 219.228.231.85;int serverport = 6666;private System.Windows.Forms.RichTextBox rt
21、bChatIn;private System.Windows.Forms.ListBox lbChatters;private System.Windows.Forms.TextBox ChatOut;private System.Windows.Forms.Button btnDisconnect;private System.Windows.Forms.Button btnSend;private System.Windows.Forms.TextBox clientName;string clientname;private System.Windows.Forms.Button btn
22、Connect;private System.ComponentModel.Container components = null;public Form1()InitializeComponent();/ / 清理所有正在使用的资源。/ protected override void Dispose( bool disposing )if( disposing )if(receive != null)QuitChat();if (components != null) components.Dispose();base.Dispose( disposing );#region Windows
23、 窗体设计器生成的代码/ / 设计器支持所需的方法 - 不要使用代码编辑器修改/ 此方法的内容。/ private void InitializeComponent()this.lbChatters = new System.Windows.Forms.ListBox();this.rtbChatIn = new System.Windows.Forms.RichTextBox();this.checkBox1 = new System.Windows.Forms.CheckBox();this.ChatOut = new System.Windows.Forms.TextBox();this
24、.btnSend = new System.Windows.Forms.Button();this.statusBar1 = new System.Windows.Forms.StatusBar();this.btnDisconnect = new System.Windows.Forms.Button();this.clientName = new System.Windows.Forms.TextBox();this.btnConnect = new System.Windows.Forms.Button();this.SuspendLayout();/ / lbChatters/ this.lbChatters.ItemHeight = 12;this.lbChatters.Location = new System.Drawing.Point(32, 40);this.lbChatters.Name = lbChatters;this.lbChatters.Size = new System.Drawing.Size(112, 172);this.lbChatters.TabIndex = 0;/ / rt
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1