最近准备利用.NET的套接字开发一个类似QQ的IM组件,先写了一个Udp信息收发静态类!也不是很完善,暂时先储备着,以后重构用!
using
System;
using System.Net;
using System.Net.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();//关闭套接字释放资源
}
}
}
}
using System.Net;
using System.Net.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();//关闭套接字释放资源
}
}
}
}