Chinaunix首页 | 论坛 | 博客
  • 博客访问: 443707
  • 博文数量: 138
  • 博客积分: 4114
  • 博客等级: 上校
  • 技术积分: 1341
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-14 20:41
文章分类

全部博文(138)

文章存档

2014年(1)

2013年(2)

2012年(78)

2011年(13)

2010年(34)

2009年(10)

我的朋友

分类: LINUX

2010-05-17 10:45:04

//udpserversocket.h
// ##### typedef zint32    SOCKET;


typedef void (*CALLBACK_RECV)(void *pThis, SOCKET sock, char *pData, zint32 iSize, sockaddr_in addr, zint32 addrLen);

class CUDPServerSocket
   : public  ZBaseThread
{
    public:
      CUDPServerSocket();
      ~CUDPServerSocket();
      void SetHostIP(std::string strIp);
      void SetHostPort(zuint16 usPort);
      void SetRecvCallBack(CALLBACK_RECV onRecv);
      void SetObjPointer(void *pThis);
      bool SendDataToDes(char * buf, zint32 bufLen, const sockaddr_in & toaddr);

      bool Init();
      void Close();

    private:
      virtual void OnThreadProc();
      std::string m_strIp;
      zuint16     m_usPort;
      bool        m_ssActive;
     
      CALLBACK_RECV   mfn_Recv;
      void *      m_pThis;
      SOCKET      m_serverSock;
      sockaddr_in GetNetAddr();

      char        sendBuf[BUF_LEN];
      char        msgBuf[MAX_MSG_LEN];
};

以上仅是提供一个思路, 具体的实现看你自己了, 你也可以提出自己的server类, 关键看你的需求是什么, 要实现什么之前,最起码知道你想要什么吧.

class CUDPCLientSocket
   : public ZBaseThread
{
    public:
       CUDPClientSocket();
       ~CUDPClientSocket();

       void SetRemoteAddr(std::string strIp, zuint16 usPort);
       void SetRecvCallBack(CALLBACK_RECV  onRecv);
       void SetObjPointer(void * pThis);
       bool Init();
       bool SendDataToServer(char * buf, zint32 bufLen);
       bool SendDataToDes(char * buf, zint32 bufLen, sockaddr_in toaddr);
       void Close();

    private:
       virtual void OnThreadProc();
       std::string m_strIp;
       zuint16     m_usPort;
       bool        m_csActive;
      
       void *      m_pThis;
       sockaddr_in m_serverAddr;
       CALLBACK_RECV   mfn_Recv;
       SOCKET      m_clientSock;
       sockaddr_in   GetNetAddr();
};

这个类是连接到服务器的客户端的抽象

class UDPSender_c
{
   public:
      UdpSender_c();
      ~UdpSender_c();
     
      bool SendDataToDes(char * buf, zint32 bufLen, const sockaddr_in & toaddr);
  
    private:
      SOCKET  _sock;
      char    sendBuf[BUF_LEN];
};

阅读(1148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~