青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 96  文章 - 255  trackbacks - 0
<2013年7月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

E-mail:zbln426@163.com QQ:85132383 長期尋找對戰略游戲感興趣的合作伙伴。

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網站

我的個人網頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 494500
  • 排名 - 39

最新評論

閱讀排行榜

評論排行榜

UDP的客戶端看起來幾乎就是服務器端的翻版,甚至比服務器端更簡單——因為不需要bind()本機地址:
class UDPClientSock: public BaseSock {
protected:
    mutable sockaddr_in lastfromSockAddr;
    sockaddr_in destinationSockAddr;
    
char* preBuffer;
    
int preBufferSize;
    mutable 
int preReceivedLength;
public:
    
explicit UDPClientSock(int pre_buffer_size = 32);
    
virtual ~UDPClientSock();
    
void UDPSetDest(const char* dest_IP,
            
const unsigned short& dest_port);
    
void UDPSetDest(const sockaddr_in& dest_sock_addr);
    
int UDPReceive() const;
    
int UDPSendtoDest(const char* send_data,
            
const int& data_length) const;
};
在最初設計這個類的時候,我曾經考慮過安排一個服務器地址的私有數據成員,并且在構造函數里面指定服務器的地址。但是,后來我覺得使用“目的地”比“服務器”更加能體現出UDP無連接的本質特點。TCP之所以有個服務器,是因為TCP的客戶端只能和自己的服務器端通訊。而UDP的客戶端可以與任何一個UDP端口通訊——只要知道對方的地址(IP地址和UDP端口)就可以發送數據包。況且,在網絡情況越來越復雜的今天,很多服務器都不僅僅使用一個IP地址或者域名,比如網站和游戲服務器,而對于客戶端來說,只是在意連接到了指定的網站,比如google,而并不清楚是連接到google的哪個服務器。程序內部可能會根據網絡條件對具體連接的服務器地址進行調整,所以,可以隨時根據具體情況指定“目的地”,而不是一開始就指定一個“服務器”地址,這種策略顯得更加靈活。
通常情況下,客戶端也并不在意lastfromSockAddr,因為最后一次來向的地址,往往就是目的地服務器的地址。我們說過,服務器的端口是指定的,這是為了讓客戶端明確的知道,可以去連接。而客戶端的端口的端口則是系統指定的——我們并沒有在客戶端調用bind(),所以socket機制會自動幫我們綁定一個端口。通??蛻舳俗约阂膊恍枰肋@個端口號是多少,只有接收到這次UDP數據報的服務器端知道,并且按照這個端口號將服務器的信息傳送過來——沒有收到這個端口發出的數據報的UDP端口很難知道這個系統指定的端口號是多少。但是,因為這個UDP端口實際上是可以接受來自其他任何UDP端口的數據的,所以,如果你需要驗證發送某次數據的地址是不是你所期望的,比如是不是來自服務器,可能就會用到lastfromSockAddr。
UDPClientSock::UDPClientSock(int pre_buffer_size):
preBufferSize(pre_buffer_size), preReceivedLength(
0)
{
    preBuffer 
= new char[preBufferSize];
    memset(
&lastfromSockAddr, 0sizeof(lastfromSockAddr));
    memset(
&destinationSockAddr, 0sizeof(destinationSockAddr));

    sockFD 
= socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    
if (sockFD < 0) {
        sockClass::error_info(
"sock() failed.");
    }
}

UDPClientSock::
~UDPClientSock()
{
    delete [] preBuffer;
    close(sockFD);
}
其它4個類方法,跟server端的簡直一模一樣。
void UDPClientSock::UDPSetDest(const char* dest_IP,
                               
const unsigned short& dest_port)
{
    destinationSockAddr.sin_family 
= AF_INET;
    destinationSockAddr.sin_addr.s_addr 
= inet_addr(dest_IP);
    destinationSockAddr.sin_port 
= htons(dest_port);
}

void UDPClientSock::UDPSetDest(const sockaddr_in& dest_sock_addr)
{
    destinationSockAddr.sin_family 
= dest_sock_addr.sin_family;
    destinationSockAddr.sin_addr.s_addr 
= dest_sock_addr.sin_addr.s_addr;
    destinationSockAddr.sin_port 
= dest_sock_addr.sin_port;
}

int UDPClientSock::UDPReceive() const
{
    socklen_t
 from_add_len = sizeof(lastfromSockAddr); //use int in win32
    preReceivedLength 
= recvfrom(    sockFD,
                                    preBuffer,
                                    preBufferSize,
                                    
0,
                                    (sockaddr
*)&lastfromSockAddr,
                                    
&from_add_len);
    
if ( preReceivedLength < 0) {
        sockClass::error_info(
"recv() failed.");
    }

    
return preReceivedLength;
}

int UDPClientSock::UDPSendtoDest(const char* send_data,
                                 
const int& data_length) const
{
    
int send_message_size = sendto(    sockFD,
                                    send_data,
                                    data_length,
                                    
0,
                                    (sockaddr
*)&destinationSockAddr,
                                    
sizeof(destinationSockAddr));
    
if (send_message_size < 0) {
        sockClass::error_info(
"send() failed.");
    }
    
if (send_message_size != data_length) {
        sockClass::error_info(
            
"send() sent a different number of bytes than expected.");
    }
    
return send_message_size;
}
posted on 2010-06-10 19:37 lf426 閱讀(1737) 評論(0)  編輯 收藏 引用 所屬分類: SDL入門教程socket 編程入門教程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产中文一区二区三区| 久久偷窥视频| 久久午夜激情| 久久久久.com| 欧美sm极限捆绑bd| 亚洲国产精品va在线看黑人 | 亚洲啪啪91| 日韩亚洲视频在线| 亚洲一区二区三区色| 欧美一区二区三区四区夜夜大片 | 亚洲美女视频网| 亚洲专区在线视频| 久久久精品国产免费观看同学| 久久久亚洲影院你懂的| 欧美精品成人91久久久久久久| 欧美国产免费| 亚洲蜜桃精久久久久久久| 亚洲欧洲视频在线| 日韩一级裸体免费视频| 亚洲欧美一区二区激情| 久久五月天婷婷| 亚洲欧洲日韩综合二区| 午夜精品视频在线观看一区二区| 久久综合久色欧美综合狠狠| 欧美激情视频给我| 国产午夜精品全部视频播放| 亚洲日韩第九十九页| 午夜一区在线| 亚洲精品久久久久久久久久久久| 亚洲一区久久久| 欧美成人精精品一区二区频| 国产日韩在线视频| 中日韩男男gay无套| 免费精品视频| 香蕉av福利精品导航| 欧美精品免费在线| 在线日韩欧美| 欧美在线一区二区三区| 99精品国产在热久久婷婷| 蜜臀av性久久久久蜜臀aⅴ| 国产精自产拍久久久久久| 中文日韩在线视频| 亚洲国产一区二区精品专区| 久久久水蜜桃| 黄色在线一区| 久久久久看片| 欧美亚洲一级| 国产美女精品免费电影| 亚洲在线视频观看| 日韩午夜在线视频| 欧美屁股在线| 中国亚洲黄色| 一区二区三区欧美在线观看| 欧美日韩大片| 在线亚洲一区观看| 99精品视频一区| 欧美久久一级| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美视频中文一区二区三区在线观看| 影音先锋亚洲一区| 久久精品欧洲| 欧美在线free| 黄色亚洲在线| 麻豆免费精品视频| 久久乐国产精品| 亚洲高清自拍| 亚洲人成毛片在线播放女女| 欧美福利电影网| 亚洲天堂久久| 亚洲欧美国产精品专区久久| 国产精品一区二区三区四区| 久久精品伊人| 欧美国产三区| 欧美成人精品福利| 亚洲少妇自拍| 亚洲一级二级在线| 国模精品一区二区三区色天香| 久久夜色精品国产欧美乱极品| 久久精品99无色码中文字幕| 在线精品一区| 亚洲毛片一区| 国产精品综合av一区二区国产馆| 久久久亚洲高清| 米奇777在线欧美播放| 99国产精品久久久久久久久久| 在线视频一区二区| 国产亚洲欧美一区| 亚洲高清在线| 国产精品免费看| 母乳一区在线观看| 欧美日一区二区三区在线观看国产免 | 亚洲欧美国产三级| 久久精品人人做人人综合| 亚洲日韩中文字幕在线播放| 夜夜嗨av一区二区三区四季av| 国产欧美成人| 亚洲经典三级| 国产日韩精品一区二区浪潮av| 久久精品99国产精品日本| 欧美 亚欧 日韩视频在线| 午夜精品久久久久久久久久久久| 久久久久久久一区二区| 中文在线不卡| 久久这里有精品视频| 亚洲欧美激情在线视频| 免费成人美女女| 欧美一区二区视频在线| 欧美护士18xxxxhd| 久久人人97超碰国产公开结果 | 久久久久www| 欧美日韩午夜在线| 免费人成精品欧美精品| 国产欧美不卡| 一区二区三区久久精品| 亚洲日本欧美| 裸体女人亚洲精品一区| 久久精品中文字幕一区| 国产精品videosex极品| 亚洲片在线观看| 亚洲国产你懂的| 久久久久国色av免费看影院| 西瓜成人精品人成网站| 欧美日韩直播| 日韩一级欧洲| 妖精成人www高清在线观看| 久久综合色天天久久综合图片| 久久久亚洲一区| 国产视频一区免费看| 亚洲一区二区三区影院| 久久蜜桃av一区精品变态类天堂| 欧美日韩一区精品| 久久国产精品久久久| 国产精品乱码久久久久久| 亚洲精品你懂的| 亚洲国产导航| 免费成人av| 欧美大片一区二区三区| 亚洲第一中文字幕| 久久五月天婷婷| 欧美国产三区| 日韩午夜av| 欧美色图五月天| 亚洲一区制服诱惑| 欧美一区二区三区视频免费播放| 欧美视频国产精品| 亚洲一区国产一区| 久久久久久久久岛国免费| 国内外成人免费激情在线视频网站| 午夜精品久久久久久久| 久久久国产91| 在线看片成人| 欧美精品色一区二区三区| 亚洲最新在线| 欧美一级一区| 黄色成人小视频| 免费美女久久99| av成人手机在线| 久久精品国产综合| 亚洲欧洲精品一区二区三区不卡| 欧美日本国产精品| 香蕉久久一区二区不卡无毒影院| 每日更新成人在线视频| 99国产精品久久久久久久久久 | 香蕉免费一区二区三区在线观看| 久久久www免费人成黑人精品 | 久久九九久久九九| 在线免费观看视频一区| 欧美精品一区二区高清在线观看| 一本一道久久综合狠狠老精东影业| 欧美一区二区三区视频免费播放| 在线欧美三区| 国产精品呻吟| 欧美插天视频在线播放| 亚洲一区精品在线| 亚洲第一精品福利| 欧美在线欧美在线| 亚洲区一区二区三区| 国产精品天天摸av网| 女生裸体视频一区二区三区| 亚洲一区二区网站| 亚洲国产婷婷香蕉久久久久久99 | 99精品99久久久久久宅男| 久久av一区二区| 一区二区三区欧美| 狠狠色丁香久久婷婷综合_中| 欧美日韩免费在线观看| 久久亚洲电影| 亚洲欧美另类久久久精品2019| 欧美国产综合视频| 久久精品国产v日韩v亚洲| 99亚洲精品| 亚洲国产成人av好男人在线观看| 国产精品毛片一区二区三区| 欧美成人免费播放| 欧美成人免费va影院高清| 欧美mv日韩mv亚洲| 久久久999成人| 亚洲在线一区| 99re66热这里只有精品3直播 | 亚洲影院色在线观看免费|