C#下socket编程:udp协议测试


软件平台:C# + WINCE6.0

硬件平台:tiny6410

界面设计:


设计思路:

1.点击发送键则发送文本

2.开辟一个线程接收网络数据

注意:

开辟的线程调用主线程的控件会导致不安全,所以用了托管的方式调用


源代码:

[csharp]

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. using System.Net;  
  9. using System.Net.Sockets;  
  10. using System.Threading;  
  11.   
  12. namespace test_udp  
  13. {  
  14.     public partial class Form1 : Form  
  15.     {  
  16.         UdpClient udpclient;  
  17.         Byte[] sendBytes;  
  18.         IPEndPoint temp;  
  19.         public Form1()  
  20.         {  
  21.             InitializeComponent();  
  22.         }  
  23.   
  24.         //发送按键   
  25.         private void button1_Click(object sender, EventArgs e)  
  26.         {  
  27.             //定义一个字节数组,用来存放发送到远程主机的信息   
  28.             sendBytes = Encoding.Default.GetBytes(textBox3.Text);  
  29.             //调用send方法发送到远程主机   
  30.             udpclient.Send(sendBytes, sendBytes.Length);  
  31.         }  
  32.   
  33.         //确认配置   
  34.         private void button2_Click(object sender, EventArgs e)  
  35.         {  
  36.             //实例化udpclient对象   
  37.             udpclient = new UdpClient(Convert.ToInt32(textBox2.Text));  
  38.             //调用connect建立默认远程主机   
  39.             udpclient.Connect(textBox1.Text, Convert.ToInt32(textBox2.Text));  
  40.             //实例化ipendpoint对象,用来显示响应主机的标识   
  41.             temp = new IPEndPoint(IPAddress.Any,0);  
  42.             //开启接收线程   
  43.             Thread recv_udp = new Thread(new ThreadStart(recv_udp_func));  
  44.             recv_udp.Start();  
  45.         }  
  46.   
  47.         //接收线程   
  48.         public void recv_udp_func()  
  49.         {  
  50.             while (true)  
  51.             {  
  52.                 //接收数据包   
  53.                 Byte[] recv_bytes = udpclient.Receive(ref temp);  
  54.                 //将得到的数据包转换为字符串形式   
  55.                 string return_data = Encoding.Default.GetString(recv_bytes,0,recv_bytes.Length);  
  56.                 //显示   
  57.                 this.Invoke((EventHandler)delegate { this.textBox4.Text = return_data; });  
  58.             }  
  59.         }  
  60.     }  
  61. }  

相关内容