最近准备利用.NET的套接字开发一个类似QQ的IM组件,先写了一个Udp信息收发静态类!也不是很完善,暂时先储备着,以后重构用!

using System;
 using ;
 using .Sockets;
 using System.Text;namespace XChatLib
 {
     /** <summary>
     /// MessageUtility 消息工具类,该类是一个静态工具类。
     /// </summary>
     public class MessageUtility
     {        //缺省端口号
         private const int DEFAULT_PORT = 9050;        private MessageUtility()
         {
             //
             // TODO: 在此处添加构造函数逻辑
             //
         }        //发送消息方法
         public static void SendMessage(string msg)
         {
             byte[] data = new byte[1024];
             //本机主机信息
             IPHostEntry host = Dns.GetHostByName(Dns.GetHostName());            //端口号参数以后重构时可以做成一个方法从配置文件中读取端口号
             IPEndPoint ipep = new IPEndPoint(host.AddressList[0], DEFAULT_PORT);            //创建一个udp套接字
             Socket server = new Socket(AddressFamily.InterNetwork,
                 SocketType.Dgram, ProtocolType.Udp);            if(msg.Length != 0)
             {
                 data = Encoding.Unicode.GetBytes(msg);
                 try
                 {
                     server.SendTo(data, data.Length, SocketFlags.None, ipep);
                 }
                 catch(SocketException){}
                 finally
                 {
                     server.Close();
                 }            }
        }
        //接受消息方法
         public static string ReceiveMessage()
         {
             int recv;
             byte[] data = new byte[1024];            //创建一个随机终结点对象
             IPEndPoint ipep = new IPEndPoint(IPAddress.Any, DEFAULT_PORT);            //创建一个Udp套接字
             Socket newsock = new Socket(
                 AddressFamily.InterNetwork,SocketType.Dgram,    ProtocolType.Udp);            //将随机终结点与Udp套接字绑定,以等待流入的数据包
             newsock.Bind(ipep);            //创建一个接受任意发送者的终结点
             IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
             EndPoint tmpRemote = (EndPoint)(sender);            try
             {
                 recv = newsock.ReceiveFrom(data, ref tmpRemote);
                 return Encoding.Unicode.GetString(data,0,data.Length);
             }
             catch(SocketException)
             {
                 return null;
             }
             finally
             {
                 newsock.Close();//关闭套接字释放资源
             }        }
    }
 }