📄 datagramsocket.cpp
字号:
////////////////////////////////////////////////////////////////////////// Filename : DatagramSocket.cpp// Written By : reiot@ewestsoft.com// Description :////////////////////////////////////////////////////////////////////////// include files#include "DatagramSocket.h"#include "Assert.h"#include "FileAPI.h"////////////////////////////////////////////////////////////////////////// constructor for UDP Client Socket//// UDP 努扼捞攫飘 家南篮 窜瘤 nonamed 家南父 积己秦 滴搁 等促.// 恐衬窍搁, 辑滚肺 send且 锭付促 Datagram狼 林家甫 瘤沥秦滴搁// 登扁 锭巩捞促.////////////////////////////////////////////////////////////////////////DatagramSocket::DatagramSocket () throw ( Error ): m_SocketID(INVALID_SOCKET){ __BEGIN_TRY __BEGIN_DEBUG m_SocketID = SocketAPI::socket_ex( AF_INET , SOCK_DGRAM , 0 ); __END_DEBUG __END_CATCH}////////////////////////////////////////////////////////////////////////// constructor for UDP Server Socket//// UDP 辑滚 家南篮 家南阑 积己窍绊, port 甫 官牢爹矫虐搁 霖厚啊 肯丰等促.////////////////////////////////////////////////////////////////////////DatagramSocket::DatagramSocket ( uint port ) throw ( Error ): m_SocketID(INVALID_SOCKET){ __BEGIN_TRY m_SocketID = SocketAPI::socket_ex( AF_INET , SOCK_DGRAM , 0 ); // clear memory memset( &m_SockAddr , 0 , szSOCKADDR_IN ); m_SockAddr.sin_family = AF_INET; m_SockAddr.sin_addr.s_addr = htonl(INADDR_ANY); m_SockAddr.sin_port = htons(port); // bind address to socket SocketAPI::bind_ex( m_SocketID , (SOCKADDR*)&m_SockAddr , szSOCKADDR_IN ); __END_CATCH}//////////////////////////////////////////////////////////////////////// destructor//////////////////////////////////////////////////////////////////////DatagramSocket::~DatagramSocket () throw ( Error ){ __BEGIN_TRY if ( m_SocketID != INVALID_SOCKET ) FileAPI::close_ex( m_SocketID ); __END_CATCH}//////////////////////////////////////////////////////////////////////// send datagram to peer//////////////////////////////////////////////////////////////////////uint DatagramSocket::send ( Datagram * pDatagram ) throw ( ConnectException , Error ){ __BEGIN_TRY Assert( pDatagram != NULL ); try { int nSent = SocketAPI::sendto_ex( m_SocketID , pDatagram->getData() , pDatagram->getLength() , 0 , pDatagram->getAddress() , szSOCKADDR_IN ); return (uint)nSent; } catch ( ConnectException & t ) { cout <<"DatagramSocket::send Exception Check!" << endl; cout << t.toString() << endl; throw ConnectException("DatagramSocket狼 惑困肺 带柳促"); } __END_CATCH}////////////////////////////////////////////////////////////////////////// receive datagram from peer//// 父距俊 捞 努贰胶甫 blocking 栏肺 荤侩茄促搁, (溜 select 扁馆栏肺)// 酒付档 nReceived 啊 0 捞窍牢 版快绰 绝栏府扼绊 魄窜等促.////////////////////////////////////////////////////////////////////////Datagram * DatagramSocket::receive () throw ( ConnectException , Error ){ __BEGIN_TRY Datagram * pDatagram = NULL; SOCKADDR_IN SockAddr; uint _szSOCKADDR_IN = szSOCKADDR_IN; // 郴何 滚欺俊促啊 汗荤秦敌促. int nReceived = SocketAPI::recvfrom_ex( m_SocketID , m_Buffer , DATAGRAM_SOCKET_BUFFER_LEN , 0 , (SOCKADDR*)&SockAddr , &_szSOCKADDR_IN ); if ( nReceived > 0 ) { pDatagram = new Datagram(); pDatagram->setData( m_Buffer , nReceived ); pDatagram->setAddress( &SockAddr ); } return pDatagram; __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -