C# 简单聊天GUI 源代码
简单聊天GUI
服务器端:
using System; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace SimpleIM { public partial class Form1 : Form { // 申明变量 private TcpListener tcpListen = null; private TcpClient tcpClient = null; private int Port = 888; IPAddress ipaddress; private NetworkStream networkStream = null; private BinaryReader reader; private BinaryWriter writer; // 申明委托 // 显示消息 private delegate void ShowMessage(string str); private ShowMessage showMessageCallback; // 清空消息 private delegate void ResetMessage(); private ResetMessage resetMessageCallBack; public Form1() { InitializeComponent(); // 实例化委托 // 显示消息 showMessageCallback = new ShowMessage(showMessage); // 重置消息 resetMessageCallBack = new ResetMessage(resetMessage); ipaddress = IPAddress.Loopback; Port = Convert.ToInt32(tstbPort.Text); } // 定义回调函数 // 显示消息 private void showMessage(string str) { tbResult.AppendText(str); } // 清空消息 private void resetMessage() { tbMsg.Clear(); tbMsg.Focus(); } private void Form1_Activated(object sender, EventArgs e) { tbMsg.Focus(); } private void tsbStartStop_Click(object sender, EventArgs e) { Port = Convert.ToInt32(tstbPort.Text); if (tsbStartStop.Text == "启动") { try { tcpListen = new TcpListener(ipaddress, Port); tcpListen.Start(); // 启动一个线程来接受请求 Thread acceptThread = new Thread(acceptClientConnect); acceptThread.Start(); } catch (Exception ex) { MessageBox.Show(ex.Message); } tsbStartStop.Text = "停止"; tsbStartStop.ToolTipText = "停止"; } else { try { if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } if (tcpClient != null) { // 断开连接 tcpClient.Close(); tcpListen.Stop(); } tslMsg.Text = "断开连接"; } catch (Exception ex) { MessageBox.Show(ex.Message); } tslMsg.Text = "链接已断开"; tsbStartStop.Text = "启动"; tsbStartStop.ToolTipText = "启动"; } } // 接受请求 private void acceptClientConnect() { tslMsg.Text = "正在监听"; Thread.Sleep(500); try { tslMsg.Text = "等待连接"; tcpClient = tcpListen.AcceptTcpClient(); if (tcpClient != null) { tslMsg.Text = "接受到连接"; networkStream = tcpClient.GetStream(); reader = new BinaryReader(networkStream); writer = new BinaryWriter(networkStream); Thread threadread = new Thread(new ThreadStart(round)); threadread.Start(); } } catch { tslMsg.Text = "停止监听"; Thread.Sleep(500); tslMsg.Text = "就绪"; } } // 接收消息 private void round() { tslMsg.Text = "接受消息中"; try { while (reader != null) { string receivemessage = reader.ReadString(); tbResult.Invoke(showMessageCallback, tcpClient.Client.RemoteEndPoint + ": " + receivemessage + Environment.NewLine); } } catch { } } private void btnSend_Click(object sender, EventArgs e) { if (tbMsg.Text != string.Empty) { try { tslMsg.Text = "正在发送"; writer.Write(tbMsg.Text); writer.Flush(); tbResult.Invoke(showMessageCallback, "Me: " + tbMsg.Text + Environment.NewLine); tbMsg.Invoke(resetMessageCallBack, null); } catch { } } } } }
客户端:
using System; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; namespace SimpleIMClient { public partial class Form1 : Form { // 申明变量 private TcpClient tcpClient = null; private NetworkStream networkStream = null; private BinaryReader reader; private BinaryWriter writer; // 申明委托 // 显示消息 private delegate void ShowMessage(string str); private ShowMessage showMessageCallback; // 清空消息 private delegate void ResetMessage(); private ResetMessage resetMessageCallBack; public Form1() { InitializeComponent(); // 实例化委托 // 显示消息 showMessageCallback = new ShowMessage(showMessage); // 重置消息 resetMessageCallBack = new ResetMessage(resetMessage); } // 显示消息 private void showMessage(string str) { tbResult.AppendText(str); } // 清空消息 private void resetMessage() { tbMsg.Clear(); tbMsg.Focus(); } private void tsbConnect_Click(object sender, EventArgs e) { if (tsbConnect.Text == "连接") { try { // 通过一个线程发起请求,多线程 Thread connectThread = new Thread(ConnectToServer); connectThread.Start(); tsbConnect.Text = "断开"; tsbConnect.ToolTipText = "断开"; } catch { MessageBox.Show("无法连接"); } } else { try { if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } if (tcpClient != null) { // 断开连接 tcpClient.Close(); } // "断开了连接" tsbConnect.Text = "连接"; tsbConnect.ToolTipText = "连接"; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } // 连接服务器方法,建立连接的过程 private void ConnectToServer() { try { if (tstbIP.Text == string.Empty || tstbPort.Text == string.Empty) { MessageBox.Show("请先输入服务器的IP地址和端口号"); } IPAddress ipaddress = IPAddress.Parse(tstbIP.Text); tcpClient = new TcpClient(); tcpClient.Connect(ipaddress, int.Parse(tstbPort.Text)); // 延时操作 Thread.Sleep(500); if (tcpClient != null) { networkStream = tcpClient.GetStream(); reader = new BinaryReader(networkStream); writer = new BinaryWriter(networkStream); } Thread receiveThread = new Thread(receiveMessage); receiveThread.Start(); } catch { Thread.Sleep(500); } } // 接受消息 private void receiveMessage() { try { while (reader != null) { string receivemessage = reader.ReadString(); tbResult.Invoke(showMessageCallback, tcpClient.Client.RemoteEndPoint + ": " + receivemessage + Environment.NewLine); } } catch { } } private void btnSend_Click(object sender, EventArgs e) { try { writer.Write(tbMsg.Text); writer.Flush(); tbResult.Invoke(showMessageCallback, "Me: " + tbMsg.Text + Environment.NewLine); tbMsg.Invoke(resetMessageCallBack, null); } catch { } } } }
浙公网安备 33010602011771号