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

隨筆 - 96  文章 - 255  trackbacks - 0
<2010年6月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網站

我的個人網頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 494663
  • 排名 - 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 閱讀(1738) 評論(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>
            国产精品99久久久久久久久久久久 | 亚洲国产精品va在线看黑人 | 亚洲黄页视频免费观看| 狠狠干综合网| 亚洲国产va精品久久久不卡综合| 亚洲国产精品一区二区第四页av | 99精品免费| 亚洲自拍偷拍麻豆| 久久精品在这里| 欧美刺激午夜性久久久久久久| 欧美精品一区在线发布| 国产精品久久77777| 国产欧美日韩在线视频| 在线播放精品| 亚洲精品在线观看视频| 欧美亚洲视频| 欧美电影美腿模特1979在线看| 亚洲精品网站在线播放gif| 午夜精品久久久久| 欧美成人午夜激情在线| 国产精品视频导航| 91久久久一线二线三线品牌| 亚洲欧美精品| 亚洲丰满在线| 亚洲综合视频在线| 欧美理论视频| 在线精品福利| 欧美在线视频一区二区| 亚洲精品美女在线| 久久久国产精品一区二区三区| 欧美日韩成人一区二区| 在线看视频不卡| 性娇小13――14欧美| 91久久综合| 久久久久久香蕉网| 国产美女精品| 亚洲中午字幕| 亚洲精品国产精品久久清纯直播| 久久精品国产一区二区电影| 国产精品国色综合久久| 99视频有精品| 欧美激情小视频| 欧美制服丝袜| 亚洲美女一区| 欧美va亚洲va国产综合| 黄色成人在线| 久久久精品一区| 中文精品一区二区三区| 欧美日韩精品免费在线观看视频| 激情欧美一区二区三区在线观看| 国产精品一区二区欧美| 亚洲老司机av| 亚洲福利小视频| 久久一综合视频| 狠狠色狠狠色综合系列| 久久精品视频播放| 性视频1819p久久| 国产精品久久一区主播| 亚洲视频久久| 日韩系列欧美系列| 欧美日韩亚洲综合| 中文av一区特黄| 日韩视频一区二区三区| 欧美日韩你懂的| 亚洲午夜日本在线观看| 亚洲天天影视| 国产视频一区在线| 久久―日本道色综合久久| 久久久xxx| 91久久线看在观草草青青| 亚洲韩国一区二区三区| 欧美日韩国产精品自在自线| 亚洲视频一区二区在线观看| 亚洲一区二区黄色| 国产日韩欧美一二三区| 巨乳诱惑日韩免费av| 蜜臀99久久精品久久久久久软件| 亚洲三级免费电影| 亚洲美女av在线播放| 国产精品久久久久久久久久妞妞| 久久成人18免费网站| 久久亚洲二区| 亚洲无限乱码一二三四麻| 亚洲免费在线| 一本一本大道香蕉久在线精品| 亚洲一二区在线| 欧美多人爱爱视频网站| 亚洲精品欧美日韩| 欧美一区成人| 欧美在线观看视频在线| 18成人免费观看视频| 亚洲日本黄色| 国产欧美日韩在线观看| 欧美大胆人体视频| 欧美另类在线播放| 亚洲欧美日韩一区在线| 久久精品91久久久久久再现| 亚洲高清免费视频| 亚洲一区观看| 亚洲高清不卡| 中文国产一区| 久久国产综合精品| 在线免费观看一区二区三区| 亚洲人成久久| 国产亚洲精品美女| 最新中文字幕亚洲| 国产亚洲午夜| 亚洲视频一区在线| 亚洲激情视频在线| 欧美在线免费观看视频| 亚洲影院免费| 欧美激情一区二区三区高清视频 | 久久亚裔精品欧美| 欧美午夜无遮挡| 欧美寡妇偷汉性猛交| 国产日韩一区二区| 中文在线不卡| 亚洲视频综合| 欧美激情视频给我| 欧美**字幕| 国产在线拍偷自揄拍精品| 99精品国产高清一区二区| 亚洲人成7777| 久久夜色精品国产亚洲aⅴ| 久久精品国产欧美激情| 国产精品福利影院| 99ri日韩精品视频| 9人人澡人人爽人人精品| 免费一级欧美片在线观看| 欧美1区视频| 一区二区三区在线视频免费观看| 性欧美长视频| 久久久久久亚洲精品杨幂换脸| 国产精品亚洲аv天堂网| 亚洲一区二区三区四区视频| 午夜精品久久久久久久男人的天堂 | 另类图片国产| 欧美成人久久| 亚洲电影免费观看高清完整版| 欧美在线|欧美| 久久夜色精品一区| 曰本成人黄色| 欧美va亚洲va国产综合| 亚洲人成网站精品片在线观看| 亚洲激情视频网| 欧美精品粉嫩高潮一区二区 | 亚洲视频二区| 国产精品成人一区二区网站软件| 一区二区激情小说| 欧美亚洲免费在线| 国内精品久久久久久久果冻传媒| 久久久亚洲一区| 亚洲国产成人av| 亚洲视频在线一区| 国产日韩综合| 美国十次成人| 亚洲精品免费观看| 亚洲欧美日韩人成在线播放| 99在线视频精品| 国产欧美短视频| 久久久精彩视频| 欧美不卡视频一区| 亚洲最新在线视频| 国产精品一区二区在线| 久久久国产视频91| 亚洲日本欧美| 久久精品国产欧美激情| 亚洲人成啪啪网站| 欧美日韩视频一区二区| 欧美一区二区黄色| 亚洲国产一区二区三区青草影视 | 亚洲一区二区综合| 国产日韩欧美夫妻视频在线观看| 久久久久久久久久看片| 日韩视频在线观看国产| 久久综合电影一区| 亚洲一区二区精品在线观看| 激情一区二区| 国产精品久久九九| 你懂的网址国产 欧美| 亚洲欧美日韩国产综合精品二区| 欧美成人日韩| 久久精品国产亚洲一区二区三区| 亚洲最黄网站| 亚洲电影免费观看高清完整版在线 | 欧美一区高清| 99这里只有精品| 亚洲第一色中文字幕| 久久九九国产精品| 亚洲免费视频观看| 亚洲精品一品区二品区三品区| 国产区精品在线观看| 欧美日韩在线一区| 欧美 日韩 国产一区二区在线视频 | 国产精品久久久久久久久搜平片| 卡通动漫国产精品| 欧美亚洲一区| 亚洲午夜高清视频| 日韩一二三在线视频播| 欧美激情一级片一区二区|