2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C#网络编程 - 局域网聊天室(UDP)

C#网络编程 - 局域网聊天室(UDP)

时间:2019-12-24 23:13:20

相关推荐

C#网络编程 - 局域网聊天室(UDP)

一:知识预览

TextBox禁止编辑ComboBox元素的添加获取本机网卡IPs多道程序设计(多线程)

二:界面设计

三:通讯逻辑

【知识预览】

1> TextBox禁止编辑

private void textBox2_KeyPress(object sender, KeyPressEventArgs e){//控制TextBox无法被编辑e.Handled = true;}

2> ComboBox元素的添加

private void Server_Load(object sender, EventArgs e){var ips = IP.GetIP.getIP();foreach(string i in ips) {ipBox.Items.Add(i);}}

3>获取本机网卡IPs

【源码SourceCode】

1> Server

using System;using System.Text;using System.Windows.Forms;using ;using .Sockets;using System.Threading;namespace ChatBox{public partial class Server : Form{Thread thread = null;string server_ip = null;public Server(){InitializeComponent();}private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){if (thread == null){//test:左侧填充选择数据var data = $"{ipBox.Text}服务端开启成功!\n";textBox1.AppendText(data);///加载线程依赖数据并开启线程(启动服务器)var udp = new UdpClient(12344);//IPEndPoint对象显示响应主机的标识(接收数据使用)var ip_end_point = new IPEndPoint(IPAddress.Parse("192.168.0.103"), 12344);//var broadcast = new IPEndPoint(IPAddress.Broadcast, 12345);var broadcast = new IPEndPoint(IPAddress.Parse("192.168.0.255", 12345);byte[] receiveBytes;thread = new Thread(() =>{while (true){try{//Server接收数据立刻转发if (udp.Available <= 0) continue;//上述判断为必须条件,否则程序关闭后,下方Receive会导致程序无法正常结束receiveBytes = udp.Receive(ref ip_end_point);Console.WriteLine(Encoding.UTF8.GetString(receiveBytes));udp.Send(receiveBytes, receiveBytes.Length, broadcast);}catch (Exception x){Console.WriteLine(x.Message);}}});thread.Start();ipBox.Items.Clear();//ipBox.Dispose();}else{textBox1.AppendText($"{server_ip}服务端已关闭!\n");this.Hide();thread.Abort();}}//限制内容编辑private void textBox1_KeyPress(object sender, KeyPressEventArgs e){e.Handled = true;}private void Server_Load_1(object sender, EventArgs e){//预加载本地网卡IP信息var ips = IP.GetIP.getIP();foreach (string i in ips){ipBox.Items.Add(i);}}private void Server_FormClosing(object sender, FormClosingEventArgs e){comboBox1_SelectedIndexChanged(null,null);}}}

2> Client

using System;using System.Text;using System.Windows.Forms;using ;using .Sockets;using System.Threading;namespace Client{public partial class Form1 : Form{Thread thread_receive = null;static UdpClient udp_sender = new UdpClient();public Form1(){//限制窗体大小InitializeComponent();this.MaximizeBox = false;this.MinimizeBox = false;this.AutoSizeMode = AutoSizeMode.GrowAndShrink;}//文本框限制编辑private void textBox1_KeyPress(object sender, KeyPressEventArgs e){e.Handled = true;}//发送模块private void button1_Click(object sender, EventArgs e){byte[] send_bytes;send_bytes = Encoding.UTF8.GetBytes($"{IP.GetIP.getIP()[0]}:{textBox2.Text}");udp_sender.Send(send_bytes, send_bytes.Length);textBox2.Text = "";}//连接模块private void button2_Click(object sender, EventArgs e){udp_sender.Connect($"{textBox3.Text.Trim()}", 12344);}//初始化线程(持续读取广播数据并显示)private void Form1_Load(object sender, EventArgs e){if (thread_receive == null){var udp_receive = new UdpClient(12345);byte[] receive_bytes;//var ip_end_point = new IPEndPoint(IPAddress.Any, 12345);var ip_end_point = new IPEndPoint(IPAddress.Parse("192.168.0.255", 12345);thread_receive = new Thread(() =>{while (true){try{if (udp_receive.Available <= 0) continue;receive_bytes = udp_receive.Receive(ref ip_end_point);textBox1.AppendText($"{Encoding.UTF8.GetString(receive_bytes)}\n");}catch (Exception x){Console.WriteLine(x.Message);}}});thread_receive.Start();}else{this.Hide();thread_receive.Abort();}}private void Form1_FormClosing(object sender, FormClosingEventArgs e){Form1_Load(null, null);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。