//UDPP2PSock.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Threading;usingP2PWellKnown;namespaceUDPP
{///
///UDPP2P套接字管理类///
public classUDPP2PSock
{///
///用户登录事件///
public eventUdpUserLogInDelegate OnUserLogInU;///
///一般UDP消息事件///
public eventUdpMessageDelegate OnSockMessageU;///
///初始化一个新连接事件///
public eventUdpNewConnectDelegate OnNewConnectU;///
///UDP服务器///
privateUdpClient m_udpServer;///
///UDP客户端///
privateUdpClient m_udpClient;///
///服务器实际上在本地机器上监听的///端口,用于当一台计算机上同时启///动两个可两以上服务器进程时,标///识不同的服务器进程///
private intm_iMyServerPort;///
///客户端在本地机器上实际使用的端口,///用于当一台计算机上同时有两个或两///个以上客户端进程在运行时,标识不///同的客户端进程///
private intm_iMyClientPort;///
///标识是否已成功创服务器///
private boolm_bServerCreated;///
///标识是否已成功创建客户端///
private boolm_bClientCreated;///
///服务器使用的线程///
privateThread m_serverThread;///
///客户端使用的线程///
privateThread m_clientThread;///
///打洞线程///
//private Thread m_burrowThread;
///
///远端节点///
privateIPEndPoint m_remotePoint;///
///当前进程作为客户端的公共终端///
private stringm_strMyPublicEndPoint;///
///当前进程作为客户端的私有终端///
private stringm_strMyPrivateEndPoint;///
///用于接受信息的 StringBuilder实例///
private StringBuilder m_sbResponse = newStringBuilder();///
///P2P打洞时标识是否收到回应消息///
private bool m_bRecvAck = false;///
///请求向其方向打洞的私有终端///
privateIPEndPoint m_requestPrivateEndPoint;///
///请求向其方向打洞的公共终端///
privateIPEndPoint m_requestPublicEndPoint;///
///打洞消息要发向的节点///
privateToEndPoint m_toEndPoint;///
///用于标识是否已经和请求客户端建立点对连接///
//private bool m_bHasConnected=false ;
///
///创建服务器或客户端的最大尝试///次数,为(65536-60000),防止///因不能创建而限入死循环或使用///无效端口///
private const int MAX_CREATE_TRY = 5536;///
///打洞时尝试连接的最大尝试次数///
private const int MAX_CONNECT_TRY = 10;///
///构造函数,初始化UDPP2P实例///
publicUDPP2PSock()
{
m_iMyServerPort=P2PConsts.UDP_SRV_PORT;
m_iMyClientPort= 60000;
m_