1. 程式人生 > >UDP學習筆記(.NET)

UDP學習筆記(.NET)

以下程式碼來源於《C#網路程式設計技術教程》。

 

 1     public class UDPComm
 2     {
 3         public static byte[] EncodingASCII(string buf)//編碼
 4         {
 5             byte[] data = Encoding.ASCII.GetBytes(buf + "\r\n");
 6             return data;
 7         }
 8         public static string DecodingASCII(byte
[] buf)//解碼 9 { 10 string st = Encoding.ASCII.GetString(buf); 11 return st; 12 } 13 }

 

 

 1 class UDPServer
 2     {
 3         static UdpClient m_server;
 4         static ArrayList mblist;
 5 
 6         static void AddMember(IPEndPoint rep)//
加入組 7 { 8 mblist.Add(rep); 9 byte[] data = UDPComm.EncodingASCII("OK"); 10 m_server.Send(data, data.Length, rep); 11 } 12 static void DelMember(IPEndPoint rep)//離開組 13 { 14 mblist.Remove(rep); 15 byte[] data = UDPComm.EncodingASCII("
OK"); 16 m_server.Send(data, data.Length, rep); 17 18 } 19 static void SendToMember(string buf)//組內轉發資料 20 { 21 foreach (IPEndPoint mb in mblist) 22 { 23 byte[] data = UDPComm.EncodingASCII(buf); 24 m_server.Send(data, data.Length, mb); 25 } 26 } 27 28 static void Main(string[] args) 29 { 30 string m_hostIP = "127.0.0.1"; 31 int m_port = 6666; 32 IPEndPoint m_EndPoint; 33 ArrayList memberlist = new ArrayList(); 34 bool rt = false; 35 byte[] data; 36 string m_ReturnData; 37 38 //從命令列提取主機IP和埠 39 if (args.Length < 2) 40 { 41 Console.WriteLine("Usage: UDPServer hostIP port"); 42 } 43 else 44 { 45 m_hostIP = args[0].ToString(); 46 m_port = int.Parse(args[1].ToString()); 47 rt = true; 48 } 49 50 if (rt) 51 { 52 mblist = new ArrayList();//組成員列表 53 54 IPAddress m_ipA = IPAddress.Parse(m_hostIP); 55 m_EndPoint = new IPEndPoint(m_ipA, m_port); 56 m_server = new UdpClient(m_EndPoint); 57 58 Console.WriteLine("Ready for Connect......"); 59 while (true) 60 { 61 data = m_server.Receive(ref m_EndPoint);//接收資料 62 m_ReturnData = UDPComm.DecodingASCII(data); 63 64 if (m_ReturnData.IndexOf("ADD") > -1)//加入組 65 { 66 AddMember(m_EndPoint); 67 Console.WriteLine(m_EndPoint.ToString() + "has added to group"); 68 } 69 else if (m_ReturnData.IndexOf("DEL") > -1)//退出組 70 { 71 DelMember(m_EndPoint); 72 Console.WriteLine(m_EndPoint.ToString() + "has delete from group"); 73 } 74 else 75 { 76 if (mblist.Contains(m_EndPoint))//轉發資料 77 { 78 SendToMember(m_ReturnData + "[" + m_EndPoint.ToString() + "]"); 79 Console.WriteLine(m_ReturnData + "[" + m_EndPoint.ToString() + "]" 80 + "has resented to member"); 81 } 82 } 83 } 84 m_server.Close(); 85 } 86 } 87 }

 

 

 1 class UDPClient
 2     {
 3         static void Main(string[] args)
 4         {
 5             string m_hostIP = "127.0.0.1";
 6             int m_port = 6666;
 7             UdpClient m_client;
 8             bool rt = false;
 9             byte[] data;
10             string m_SendData, m_ReturnData;
11             IPEndPoint m_EndPoint;
12 
13             //從命令列提取伺服器地址和偵聽埠
14             if (args.Length < 2)
15             {
16                 Console.WriteLine("Usage: UDPClient hostIP port");
17             }
18             else
19             {
20                 m_hostIP = args[0].ToString();
21                 m_port = int.Parse(args[1].ToString());
22                 rt = true;
23             }
24 
25             if (rt)
26             {
27                 IPAddress m_ipA = IPAddress.Parse(m_hostIP);
28                 m_EndPoint = new IPEndPoint(m_ipA, m_port);
29 
30                 IPAddress m_ipA1 = IPAddress.Parse("127.0.0.1");
31                 IPEndPoint m_EndPoint1 = new IPEndPoint(m_ipA1, 8060);
32                 //m_client = new UdpClient(); 不繫結本地終結點,系統將會隨機分配一個終結點
33                 m_client = new UdpClient(m_EndPoint1);
34                 
35                 m_client.Connect(m_EndPoint);
36 
37                 while (true)
38                 {
39                     Console.WriteLine("Input [ADD|DEL|REF|QUIT|Message]:");
40                     m_SendData = Console.ReadLine();
41 
42                     if(m_SendData.IndexOf("QUIT")>-1)//退出
43                     {
44                         m_SendData = "DEL";
45                     }
46 
47                     if(m_SendData.IndexOf("REF")<=-1)//重新整理顯示
48                     {
49                         data = UDPComm.EncodingASCII(m_SendData);
50                         m_client.Send(data, data.Length);
51                     }
52                     if (m_SendData.IndexOf("QUIT") > -1)
53                         break;
54 
55                     data = m_client.Receive(ref m_EndPoint);
56                     Console.WriteLine(m_EndPoint.ToString());
57                     m_ReturnData = UDPComm.DecodingASCII(data);
58                     Console.WriteLine(m_ReturnData);
59                 }
60                 //退出
61                 Console.WriteLine("Byte!");
62                 m_client.Close();
63             }
64         }
65     }