c#-UDP-多线程收发消息的类

10 篇文章 0 订阅

测试用代码,已编译运行通过,保留,省的以后碰到这类需求,可直接用。

先上图,一张图顶100句话。
在这里插入图片描述
在这里插入图片描述

public partial class Form1 : Form
{
UdpClient udpClient;
Thread UdpThread;
delegate void updateUI(string msg);
updateUI AddMsg2LogDelegate;
public Form1()
{
InitializeComponent();
AddMsg2LogDelegate = new updateUI(AddMsg2Log);
}

private void btnstartservice_Click(object sender, EventArgs e)
{
StartServer();
}
private void StartServer()
{
if (udpClient != null)
{
UdpThread.Abort();
Thread.Sleep(TimeSpan.FromMilliseconds(500d));
udpClient.Close();
}
try
{
udpClient = new UdpClient(int.Parse(textBoxPort.Text));
UdpThread = new Thread(new ThreadStart(UdpReciveThread));
UdpThread.Start();
//buttonStartServer.Enabled = false;
}
catch (Exception y)
{
MessageBox.Show(this, y.Message, "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
void UdpReciveThread()
{
IPEndPoint remoteHost = null;
this.Invoke(AddMsg2LogDelegate, "启动...");
//listBox1.Items.Add("启动...");
while (udpClient != null && Thread.CurrentThread.ThreadState == ThreadState.Running)
{
try
{
this.Invoke(AddMsg2LogDelegate, "等待连接...");

byte[] buf = udpClient.Receive(ref remoteHost);
string bufs = Encoding.UTF8.GetString(buf);
string s = string.Format("主机:{0}; 端口:{1}; 数据报长度:{2}; ",remoteHost.Address, remoteHost.Port, buf.Length);
this.BeginInvoke(AddMsg2LogDelegate, s);
this.BeginInvoke(AddMsg2LogDelegate, bufs);
}
catch (Exception y)
{
this.Invoke(AddMsg2LogDelegate, y.Message);
}
}
this.Invoke(AddMsg2LogDelegate, "结束...");
}

public void AddMsg2Log(string message)
{
listBoxLog.Items.Add(message);
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
System.Environment.Exit(0);
}

private void btnSendMessage_Click(object sender, EventArgs e)
{
try
{
UdpClient uc = new UdpClient(textBoxHost.Text,int.Parse(textBoxPort.Text));
byte[] sendbuf = Encoding.UTF8.GetBytes(textBoxMessage.Text);
uc.Send(sendbuf, sendbuf.Length);
}
catch (Exception y)
{
MessageBox.Show(this, y.Message, "发送失败", MessageBoxButtons.OK,MessageBoxIcon.Hand);
}
}

private void button1_Click(object sender, EventArgs e)
{
this.listBoxLog.Items.Clear();
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值