C# 建立UDP服务器并接收客户端数据

服务器端对象类库:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Sockets;using System.Net;using System.Threading;using System.IO;namespace UdpChatExample{/// <summary>/// UDP服务器对象/// </summary>public class UDPServerClass{public delegate void MessageHandler(string Message);//定义委托事件public event MessageHandler MessageArrived;public UDPServerClass(){//获取本机可用IP地址IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());foreach (IPAddress ipa in ips){if (ipa.AddressFamily == AddressFamily.InterNetwork){MyIPAddress = ipa;//获取本地IP地址break;}}Note_StringBuilder = new StringBuilder();PortName = 8080;}public UdpClient ReceiveUdpClient;/// <summary>/// 侦听端口名称/// </summary>public int PortName;/// <summary>/// 本地地址/// </summary>public IPEndPoint LocalIPEndPoint;/// <summary>/// 日志记录/// </summary>public StringBuilder Note_StringBuilder;/// <summary>/// 本地IP地址/// </summary>public IPAddress MyIPAddress;public void Thread_Listen(){//创建一个线程接收远程主机发来的信息Thread myThread = new Thread(ReceiveData);myThread.IsBackground = true;myThread.Start();}/// <summary>/// 接收数据/// </summary>private void ReceiveData(){IPEndPoint local = new IPEndPoint(MyIPAddress, PortName);ReceiveUdpClient = new UdpClient(local);IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);while (true){try{//关闭udpClient 时此句会产生异常byte[] receiveBytes = ReceiveUdpClient.Receive(ref remote);string receiveMessage = Encoding.Default.GetString(receiveBytes, 0, receiveBytes.Length);// receiveMessage = ASCIIEncoding.ASCII.GetString(receiveBytes, 0, receiveBytes.Length);MessageArrived(string.Format("{0}来自{1}:{2}", DateTime.Now.ToString(), remote, receiveMessage));//try//{// Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");// ReceiveUdpClient.Send(sendBytes, sendBytes.Length, local);//}//catch (Exception e)//{//}//break;}catch{break;}}}/// <summary>/// 添加日志信息到Note_StringBuilder/// </summary>public void AddMessage_Note_StringBuilder(){}}}

界面简单代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace UdpChatExample{public partial class UDPServerForm : Form{public UDPServerForm(){InitializeComponent();}public delegate void DelegateChangeText(string Messages);void ChangeTxt(string Messages){string SBText = SB.ToString();SB.Remove(0, SB.Length);SB.Append(Messages + "\r\n" + SBText);richTextBox1.Text = SB.ToString();}StringBuilder SB = new StringBuilder();private void UDPServerForm_Load(object sender, EventArgs e){}UDPServerClass UDPServerClass1;private void button1_Click(object sender, EventArgs e){UDPServerClass1 = new UDPServerClass();UDPServerClass1.Thread_Listen();UDPServerClass1.MessageArrived += new UDPServerClass.MessageHandler(UDPServerClass1_MessageArrived);}void UDPServerClass1_MessageArrived(string Message){richTextBox1 .Invoke (new DelegateChangeText(ChangeTxt),Message);}private void UDPServerForm_FormClosing(object sender, FormClosingEventArgs e){System.Environment.Exit(System.Environment.ExitCode);}}}

,更重要的是心理上的完全自由和放松,

C# 建立UDP服务器并接收客户端数据

相关文章:

你感兴趣的文章:

标签云: