注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[RakNet] udp socket 封装层 ---- SocketLayer  

2008-09-08 00:21:34|  分类: net_RakNet |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

SocketLayer.h/.cpp

SocketLayer 封装了 udp socket 的创建、监听、收/发的各个平台差异性。

 

SOCKET SocketLayer::CreateBoundSocket( unsigned short port, bool blockingSocket, const char *forceHostAddress );

socket() -> bind() -> return it

port - 监听的端口
blockingSocket - 是否为 blocking socket,实际上此参数无用,返回的都是 non-block socket
forceHostAddress - 监听的 IP addr,如果 NULL 表示 INADDR_ANY

 

SOCKET SocketLayer::Connect( SOCKET writeSocket, unsigned int binaryAddress, unsigned short port );

将 writeSocket 连接到 (binaryAddress, port) 指定的服务器上。

 

void SocketLayer::Write( const SOCKET writeSocket, const char* data, const int length );

直接调用 send() 发送信息。(udp connect 后,只允许 send() 到 connected addr)

 

int SocketLayer::RecvFrom( const SOCKET s, RakPeer *rakPeer, int *errorCode, unsigned connectionSocketIndex );

通过 recvfrom() 接受数据,收到数据成功,则调用 ProcessNetworkPacket(),其中 rakPeer, connectionSocketIndex 仅仅是 ProcessNetworkPacket() 的参数。

 

int SocketLayer::SendTo( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port );
int SocketLayer::SendTo( SOCKET s, const char *data, int length, const char ip[ 16 ], unsigned short port );

调用 sendto(), 给指定地址发送数据。

 

int SocketLayer::SendToTTL( SOCKET s, const char *data, int length, const char ip[ 16 ], unsigned short port, int ttl );

带 TTL 的数据发送。内部实现步骤如下:
<1> Get the current TTL
<2> Set ttl to TTL
<3> SendTo()
<4> Restore the old TTL


const char* SocketLayer::DomainNameToIP( const char *domainName );

域名 -> IP,内部直接调用 gethostbyname(),有可能将程序 block 住。

 

void SocketLayer::GetMyIP( char ipList[ 10 ][ 16 ] );
<1> gethostname() 获取本机 domain name
<2> gethostbyname() 获取所有相关 IP

 

unsigned short SocketLayer::GetLocalPort ( SOCKET s );
返回 s 对应的 local port

 

  评论这张
 
阅读(1340)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017