无间道III (July 2005 C# Microsoft MVP) 的博客

《涅槃经》第十九卷:八大地狱之最,称为无间地狱,为无间断遭受大苦之意,故有此名。《地藏菩萨本愿经卷上》:如是等辈,当堕无间地狱,千万亿劫,以此连绵,求出无期......

博客园 首页 联系 订阅 管理

一直使用UDP,觉得它的优点还是很明显的,不需要连接,速度很快。近来做一个项目,需要把它编译为Windows服务,因为程序是多线程的,而在服务中调试多线程的程序十分的麻烦,因此做了这个通用UDP。

比较好的一方面是发送的时候一个Send()函数就可以了。还有就是发送的时候有range参数,只需要修改这个参数就可以控制发送消息到不同的网段,如果都是255,所有的机器都可以收到了。
希望对大家有帮助

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;

namespace UDPComm
{
    
public class UDP
    
{
        
public delegate void dlg_UDPMsgHandler(string receivebytes);
        
public static event dlg_UDPMsgHandler UDPMsgArrived;

        dlg_UDPMsgHandler udpmsghandle 
= new dlg_UDPMsgHandler(UDPRaiseEvent);
        
        
public static void Send(string range, string datagram)
  
{
   UdpClient sender 
= new UdpClient();
   IPEndPoint endPoint 
= new IPEndPoint(IPAddress.Parse(range),10001);

            
try
   
{
    datagram 
+= (char)3;
    
byte[] bytes = Encoding.ASCII.GetBytes(datagram);
    sender.Send(bytes,bytes.Length,endPoint);
   }

   
catch (Exception ex)
   
{
    Debug.WriteLine(ex.ToString());
    
return;
   }

   
finally
   
{
    sender.Close();
   }

        }


        
public static void Receiver()
        
{

            UdpClient receiveUdpClient 
= new UdpClient(10001);
            IPEndPoint RemoteIPEndPoint 
= null;

            
try
            
{
                
while (true)
                
{
                    
byte[] receiveBytes = receiveUdpClient.Receive(ref RemoteIPEndPoint);
                    
string returnData = Encoding.ASCII.GetString(receiveBytes);
                    
if (returnData.IndexOf((char)3> -1)
                    
{
                        UDPRaiseEvent(returnData.Substring(
0, returnData.Length - 1));
                    }

                    
else
                        
return;
                }

            }

            
catch (Exception ex)
            
{
                Debug.WriteLine(ex.ToString());
                
return;
            }

        }


        
public static void UDPRaiseEvent(string recebytes)
        
{
            UDPMsgArrived(recebytes);
        }

    }

}


 

接收端:

 1using System;
 2using System.Net;
 3using System.Net.Sockets;
 4using System.Text;
 5using System.Threading;
 6using System.Diagnostics;
 7using UDPComm;
 8
 9namespace UdpServer
10{
11 /// <summary>
12 /// Summary description for Class1.
13 /// </summary>

14    class Char
15    {
16        [STAThread]
17        static void Main(string[] args)
18        {
19            try
20            {
21                Thread tRec = new Thread(new ThreadStart(UDPComm.UDP.Receiver));
22                tRec.Start();
23                UDP.UDPMsgArrived += new UDP.dlg_UDPMsgHandler(UDP_UDPMsgArrived);
24            }

25            catch (Exception ex)
26            {
27                Console.WriteLine(ex.ToString());
28            }

29        }

30
31        static void UDP_UDPMsgArrived(string receivebytes)
32        {
33            Console.WriteLine(System.DateTime.Now.ToShortTimeString()+" "+receivebytes);
34        }

35    }

36}

37
38


发送端:

 1using System;
 2using System.Net;
 3using System.Net.Sockets;
 4using System.Text;
 5using System.Threading;
 6using System.Diagnostics;
 7using UDPComm;
 8
 9namespace UdpServer
10{
11 class ClientSend
12 {
13  [STAThread]
14  static void Main(string[] args)
15  {
16   try
17   {
18    Thread tSend = new Thread(new ThreadStart(s));
19    tSend.Start();
20    Console.ReadLine();
21   }

22   catch (Exception ex)
23   {
24    Console.WriteLine(ex.ToString());
25   }

26  }

27  private static void s()
28  {
29   string D = ((char)22).ToString();
30   string F = ((char)3).ToString();
31   string S = ((char)16).ToString();
32
33   for (int i=0;i<1000;i++)
34   {
35    Console.WriteLine(i.ToString());
36    UDPComm.UDP.Send("127.255.255.255""IVIP1"+D+"250"+S+"301"+S+System.DateTime.Now.ToString("yyyyMMdd")+S+System.DateTime.Now.ToString("HHmmss")+S+"1"+S+i.ToString().PadLeft(15));
37    Thread.Sleep(1000);
38   }

39            //How to end the UDP receive thread
40            UDPComm.UDP.Send("127.255.255.255", F);
41  }

42 }

43}

44
45
posted on 2006-06-02 22:24  无间道  阅读(1290)  评论(2编辑  收藏  举报