一个Udp信息收发静态类!

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

using  System;
using  System.Net;
using  System.Net.Sockets;
using  System.Text;

namespace  XChatLib
expandedblockstart%5B5%5D.gifcontractedblock%5B2%5D.gif
{
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif    
/**//// <summary>
    
/// MessageUtility 消息工具类,该类是一个静态工具类。
    
/// </summary>

    public class MessageUtility
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif    
{

        
//缺省端口号
        private const int DEFAULT_PORT = 9050;

        
private MessageUtility()
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
//发送消息方法
        public static void SendMessage(string msg)
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif        
{
            
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)
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif            
{
                data 
= Encoding.Unicode.GetBytes(msg);
                
try
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif                
{
                    server.SendTo(data, data.Length, SocketFlags.None, ipep);
                }

expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif                
catch(SocketException){}
                
finally
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif                
{
                    server.Close();
                }


            }


        }


        
//接受消息方法
        public static string ReceiveMessage()
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif        
{
            
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
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif            
{
                recv 
= newsock.ReceiveFrom(data, ref tmpRemote);
                
return Encoding.Unicode.GetString(data,0,data.Length);
            }

            
catch(SocketException)
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif            
{
                
return null;
            }

            
finally
expandedsubblockstart%5B1%5D.gifcontractedsubblock%5B3%5D.gif            
{
                newsock.Close();
//关闭套接字释放资源
            }


        }


    }

}

转载于:https://www.cnblogs.com/l9l99/archive/2010/06/30/1767956.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值