文档详情

UDP_CLIENT.doc

发布:2017-08-21约1.01万字共16页下载文档
文本预览下载声明
UDP_CLIENT 一、思路 1、建立接收socket,将socket和指定的端口绑定 2、创建接收线程,在线程中调用ioctlsocket()判断是否接收到数据,接收到数据时调用OnReceive()(类似CSocket中的OnReceive()) 3、在OnReceive中申请空间调用recvfrom接收数据 4、建立发送socket,和INADDR_ANY绑定 5、调用sendto发送数据 二、本代码直接使用socket API实现UDP通讯 相关的函数有: WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);//初始化socket库 WSACleanup();//释放socket库 socket(int af,int type,int protocol); //建立socket setsockopt(SOCKET s,int level,int optname,const char FAR * optval,int optlen);//设置socket或者协议的属性 bind(SOCKET s,const struct sockaddr FAR * name,int namelen);//地址和socket绑定 sendto(SOCKET s,const char FAR * buf,int len,int flags,const struct sockaddr FAR * to,int tolen);//发送消息 ioctlsocket(SOCKET s,long cmd,u_long FAR * argp);//获取socket状态,可以获取socket缓冲中数据长度,利用这个函数可以实现类似CSocket中的OnReceive()函数(在接收数据之前调用) recvfrom(SOCKET s,char FAR * buf,int len,int flags,struct sockaddr FAR * from,int FAR * fromlen);//接收数据 三、代码说明 1、UDPServer.h和UDPServer.cpp是实现类CUDPServer的头文件和实现文件,udpdemo.cpp是演示程序 2、编译环境在win2000 vc6.0下编译通过 3、编译时需要在vc的project的setting中连接Ws2_32.lib库 // UDPServer.h: interface for the CUDPServer class. // ////////////////////////////////////////////////////////////////////// #if !defined(UDPSERVER_H_INCLUDED_) #define UDPSERVER_H_INCLUDED_ #if _MSC_VER 1000 #pragma once #endif // _MSC_VER 1000 #include Winsock2.h // Ws2_32.lib #define CLOSE_SOCKET(X) if(X!=INVALID_SOCKET){closesocket(X);X=INVALID_SOCKET;} class CUDPServer { private: char m_szLocalIP[20]; char m_szHostName[30]; int m_RecvPort; char m_szRemoteIP[20]; int m_RemotePort; HANDLE m_RecvThread; DWORD m_ThreadID; private: void InitMemberVariable(); public: SOCKET m_SckRecive; SOCKET m_SckSend; bool m_bReciveFlag; CUDPServer(); virtual ~CUDPServer(); void Initialize(); void Destory(); //初始化socket lib bool InitSocketLib(WORD wVersion=0x0202); void CleanSocketLib(); //创建发送socket bool CreateSendSocket(); //创建接收socket bool CreateRecvSocket(int RecvPort=9527); //发送 int SendMsg(char * szBuf,int length,char * szremote
显示全部
相似文档