/*------------------------------------------------------------------------------*\
 =============================
   模块名称: UDPSocket.h
 =============================

 [目的]
 
   方便UDP的使用

 [描述]
 
   这是一个封装了UDP数据报传送的基类，功能比较基本，可以从它派生以扩展功能。这
   个类并不是所有SOCKET函数的封装，而只是封装了一些用得比较多，并且使用较麻烦的
   函数。
 
 [用法]
 
   这个模块用法很简单，如果有问题可参阅MSDN. :-)

 [依赖性]

   库
   ws2_32.lib
   
 [修改记录]
 
  日期:     01-10-11  
  版本:     1.01       
  作者:     Brant Q
  备注:
    	
 [版权]
	
	  2000-2002  115软件工厂  版权所有

 [声明]
     
	     
                                              
\*------------------------------------------------------------------------------*/
#ifndef _UDPSOCKET_H_
#define _UDPSOCKET_H_
#define MAX_UDP_SIZE   4096
WORD InitializeSocket();

int CleanUpSocket();

class CUDPSocket
{
public:
	BOOL IsSocket();
	

	CUDPSocket();
	virtual ~CUDPSocket();
	
	BOOL Create(UINT uSocketPort=0,char* pszSockAddr=NULL);
	int Destroy();

	int SendTo(const char *pBuf,int iLen,char* pszRemoteSockAddr,unsigned short uPort) const;
	int SendTo(const char *pBuf,int iLen,SOCKADDR* pRemoteAddr=NULL) const;
	
	int RecvFrom(char *pBuf,int iLen,SOCKADDR* pRemoteAddr=NULL) const;
	
	SOCKADDR_IN GetLocalAddr() const;
	SOCKET GetSocket() const;
	
	SOCKADDR_IN GetRemoteAddr() const;
	SOCKADDR_IN SetRemoteAddr(const SOCKADDR_IN &NewRemoteAddr);

		
	static u_long Name2Inet(LPCSTR szAddress);
	static u_long GetLocal_in_addr();

protected:
	
	
	SOCKET m_Socket;
	SOCKADDR_IN m_LocalAddr;
	SOCKADDR_IN m_RemoteAddr;
	
private:

};


#endif