110,534
社区成员
发帖
与我相关
我的任务
分享
//********************发送数据用定时器实现,每5秒触发一次。
/// <summary>
/// 自动发送计时器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void autoSendTimer1_Tick(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtSendMssg.Text))
{
MessageBox.Show("请先输入待发送内容");
return;
}
string message = txtSendMssg.Text;
byte[] sendbytes = Encoding.ASCII.GetBytes(message);
IPEndPoint remoteIpep1 = new IPEndPoint(
IPAddress.Parse("192.168.1.241"), 60001); // 发送到的IP地址和端口号****************************************
try
{
udpcSend1.Send(sendbytes, sendbytes.Length, remoteIpep1);
}
catch
{ }
}
int count = 0;
private void autoSendTimer2_Tick(object sender, EventArgs e)
{
string message = txtSendMssg.Text;
byte[] sendbytes = Encoding.ASCII.GetBytes(message);
IPEndPoint remoteIpep2 = new IPEndPoint(
IPAddress.Parse("192.168.1.242"), 60002);// 发送到的IP地址和端口号****************************************
try
{
udpcSend2.Send(sendbytes, sendbytes.Length, remoteIpep2);
count = count + 1;//计数用于检验接收到数据的次数
textBox10.Text = Convert.ToString(count);
}
catch
{ }
}
//***************************************接收数据,用两个线程分别接受
/// <summary>
/// 开关:在监听UDP报文阶段为true,否则为false
/// </summary>
bool IsUdpcRecvStart = false;
bool IsUdpcRecvStart2 = false;
/// <summary>
/// 线程:不断监听UDP报文
/// </summary>
Thread thrRecv1;
Thread thrRecv2;
/// <summary>
/// 按钮:接收数据开关
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRecv1_Click(object sender, EventArgs e)
{
if (!IsUdpcRecvStart) // 未监听的情况,开始监听
{
try
{
IPEndPoint localIpep1 = new IPEndPoint(
IPAddress.Parse(textBox11.Text), 10001); // 本机IP和监听端口号*****************************
//设置接收UDP监听
if (udpcRecv1 == null)
udpcRecv1 = new UdpClient(localIpep1);
IPEndPoint localIpep2 = new IPEndPoint(
IPAddress.Parse(textBox11.Text), 10100); // 本机IP,指定的发送端口号***********************************
//设置发送udp套接字
if (udpcSend1 == null)
{
udpcSend1 = new UdpClient(localIpep2);
}
}
catch{}
thrRecv1 = new Thread(ReceiveMessage1);
thrRecv1.Start();
IsUdpcRecvStart = true;
}
else // 正在监听的情况,终止监听
{
if (thrRecv1 != null)
thrRecv1.Abort(); // 必须先关闭这个线程,否则会异常
udpcRecv1.Close();
udpcRecv1 = null;
udpcSend1.Close();
udpcSend1 = null;
IsUdpcRecvStart = false;
}
}
private void btnRecv2_Click(object sender, EventArgs e)
{
if (!IsUdpcRecvStart2) // 未监听的情况,开始监听
{
try
{
IPEndPoint localIpep3 = new IPEndPoint(
IPAddress.Parse(textBox11.Text), 10002); // 本机IP和监听端口号*****************************
//设置接收UDP监听
if (udpcRecv2 == null)
udpcRecv2 = new UdpClient(localIpep3);
IPEndPoint localIpep4 = new IPEndPoint(
IPAddress.Parse(textBox11.Text), 10101);
//设置发送udp套接字
if (udpcSend2 == null)
{
udpcSend2 = new UdpClient(localIpep4);
}
}
catch{}
thrRecv2 = new Thread(ReceiveMessage2);
thrRecv2.Start();
IsUdpcRecvStart2 = true;
}
else // 正在监听的情况,终止监听
{
if (thrRecv2 != null)
thrRecv2.Abort();
udpcRecv2.Close();
udpcRecv2 = null;
udpcSend2.Close();
udpcSend2 = null;
IsUdpcRecvStart2 = false;
}
}
/// <summary>
/// 接收数据
/// </summary>
/// <param name="obj"></param>
private void ReceiveMessage1(object obj)
{
IPEndPoint remoteIpep1 = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] bytRecv1 = udpcRecv1.Receive(ref remoteIpep1);
//后面就是数据处理绘图了
}
}
private void ReceiveMessage2(object obj)
{
IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] bytRecv = udpcRecv.Receive(ref remoteIpep);
//后面就是数据处理绘图了
}
}