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

隨筆 - 96  文章 - 255  trackbacks - 0
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網站

我的個人網頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 494499
  • 排名 - 39

最新評論

閱讀排行榜

評論排行榜

echo客戶端的工作原理也很簡單:
1、向服務器端發送一個字符串;
2、接收服務器的返回信息(如果是echo服務器就會返回發送出去的字符串本身)。
3、在標準輸出中回顯服務器返回的信息。
與ehco服務器類似,我們的echo客戶端類也可以從TCPClientSock中派生出來:
//Filename AppSock.hpp

#ifndef APP_SOCK_HPP
#define APP_SOCK_HPP

#include 
<string>
#include 
"SockClass.hpp"

class TCPEchoClient: public TCPClientSock{
public:
    TCPEchoClient(
        
const char* server_IP,
        unsigned 
short server_port,
        
int pre_buffer_size = 32);
    
~TCPEchoClient();
    
bool doEcho(const std::string& echo_message) const;
};

#endif //AppSock.hpp
我們的doEcho()接收一個C++風格的字符串(std::string),將返回值設計成bool是出于以下考慮:我們希望與服務器斷開連接的信息能反饋到主程序中,并且在斷開連接后終止echo客戶端的程序。所以,返回true表示仍然與服務器保持連接,否則則已經斷開(或者異常)。
#include "AppSock.hpp"

TCPEchoClient::TCPEchoClient(
                
const char* server_IP,
                unsigned 
short server_port,
                
int pre_buffer_size):
TCPClientSock(server_IP, server_port, pre_buffer_size)
{}

TCPEchoClient::
~TCPEchoClient()
{}

bool TCPEchoClient::doEcho(const std::string& echo_message) const
{
    
if (TCPSend(echo_message.data(), echo_message.size()) < 0) {
        
return false;
    }
    size_t total_received_length 
= 0;
    
while (total_received_length < echo_message.size()) {
        
if (TCPReceive() <= 0) {
            
return false;
        }
        std::cout.write(preBuffer, preReceivedLength);
        total_received_length 
+= preReceivedLength;
    }
    std::cout 
<< std::endl;
    
return true;
}
因為我們是先發再收,我們接收前是知道應該收到多少字節的信息的。由于TCP協議對邊緣的無保障,我們應該假定是是最不利的情況,也就是一次recv()不能接收完我們需要的數據,所以,如果接收到的字節數小于我們的預期,就再次接收,直到跟我們發送的字符串長度一樣。雖然事實上在這種小數據的傳輸中很難遇到以上所描述的那種情況,但是在網絡程序的設計中,應該堅持這樣一個基本假設:你永遠不知道遠程的主機會出什么狀況,所以永遠以最壞的可能性來設計程序。
最后是主程序。主程序在標準輸入中阻塞等待用于echo的信息,為了避免無限循環,我們也設計一個可以關閉服務器端的命令/exit。這樣,輸入/exit或者服務器斷開都可以導致客戶端終止。
#include "SockClass.hpp"
#include 
"AppSock.hpp"

int main(int argc, char* argv[])
{
    unsigned 
short server_port = 5000;
    
if (argc == 3 && atoi(argv[2]) > 0) {
        server_port 
= atoi(argv[2]);
    }
    
    WinsockAPI winsockInfo;
    winsockInfo.showVersion();

    TCPEchoClient echo_client(argv[
1], server_port);
    std::
string msg;
    
bool go_on = true;
    
while (msg != "/exit" && go_on == true) {
        std::cout 
<< "Echo: ";
        std::getline(std::cin, msg);
        go_on 
= echo_client.doEcho(msg);
    }

    
return 0;
}
本節源代碼下載:
linux:
http://www.163pan.com/files/c0x000g0x.html
win32:
http://www.163pan.com/files/c0x000g0y.html
posted on 2010-06-08 11:49 lf426 閱讀(2302) 評論(1)  編輯 收藏 引用 所屬分類: SDL入門教程socket 編程入門教程

FeedBack:
# re: socket 編程入門教程(四)TCP應用:2、構建echo客戶端 2010-12-31 11:39 chgjsj
源代碼都不可以下載。
能否給我發一份,客戶端,服務器端的linux和windows的湊需要。
謝謝。
chgjsj@yahoo.com.cn

  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              六月婷婷一区| 欧美刺激午夜性久久久久久久| 欧美日韩专区在线| 欧美国产日韩一二三区| 精品成人在线观看| 欧美激情一区在线| 欧美国产国产综合| 欧美日韩国产亚洲一区| 欧美日韩国产精品自在自线| 欧美视频中文字幕| 国产精品久久久久一区二区三区| 欧美午夜精品伦理| 国产视频一区在线观看| 韩国精品一区二区三区| 亚洲精品视频在线观看免费| 一区二区三区国产盗摄| 亚洲欧美日韩成人| 久久久www成人免费无遮挡大片| 久久最新视频| 亚洲欧美日韩国产成人精品影院| 亚洲男人的天堂在线观看| 午夜在线视频观看日韩17c| 久久精品国产久精国产爱| 免费不卡在线观看av| 亚洲人成网站在线播| 9人人澡人人爽人人精品| 亚洲免费中文字幕| 鲁大师成人一区二区三区| 欧美日韩精品高清| 国内自拍一区| 亚洲性视频h| 久久综合九色九九| 在线亚洲成人| 久久综合九色99| 国产精品超碰97尤物18| 在线精品国产欧美| 亚洲欧美制服另类日韩| 欧美国产国产综合| 午夜伦理片一区| 欧美人成在线| 亚洲成人在线| 久久精品亚洲乱码伦伦中文 | 国产亚洲欧美一区二区三区| 亚洲高清色综合| 翔田千里一区二区| 亚洲国产精品嫩草影院| 欧美主播一区二区三区美女 久久精品人 | 亚洲欧美成人精品| 欧美伦理91i| 在线免费不卡视频| 久久国产精品72免费观看| 日韩网站在线看片你懂的| 久久久亚洲精品一区二区三区| 欧美日韩国产在线看| 国产精品magnet| 伊人久久婷婷| 久久国内精品视频| 亚洲综合导航| 国产精品一区二区三区乱码 | 亚洲无线一线二线三线区别av| 欧美激情区在线播放| 亚洲日本在线观看| 亚洲国产综合视频在线观看| 欧美 日韩 国产在线| 亚洲人成人一区二区三区| 欧美护士18xxxxhd| 美女在线一区二区| 亚洲美女精品一区| 99av国产精品欲麻豆| 欧美日韩国产影院| 亚洲女女做受ⅹxx高潮| 亚洲男人av电影| 狠久久av成人天堂| 欧美aⅴ一区二区三区视频| 久久久久久久999精品视频| 国产一区二区三区高清| 亚洲欧美日本国产有色| 亚洲婷婷综合色高清在线| 欧美大学生性色视频| 欧美日韩一区二区精品| 先锋影音一区二区三区| 亚洲在线观看视频| 国产精品午夜久久| 香蕉久久国产| 亚洲欧美日韩精品久久亚洲区 | 欧美aⅴ99久久黑人专区| 尤物yw午夜国产精品视频| 久久久人成影片一区二区三区| 亚洲专区一区| 国产在线国偷精品产拍免费yy| 久久精品99久久香蕉国产色戒| 欧美亚洲免费在线| 欧美日本高清视频| 欧美在线日韩精品| 久久国产黑丝| 亚洲经典三级| 日韩视频不卡中文| 国产精品色在线| 久久精品人人爽| 久久婷婷麻豆| 亚洲第一在线综合网站| 99综合电影在线视频| 国产精品自拍一区| 欧美成人一区二免费视频软件| 欧美大片在线观看| 在线观看日韩专区| 国产精品成人一区二区网站软件| 亚洲精品网站在线播放gif| 这里只有精品视频在线| 国产日韩欧美在线观看| 美女被久久久| 欧美揉bbbbb揉bbbbb| 久久精品国亚洲| 美女精品在线| 欧美亚洲在线视频| 亚洲一区二区三区欧美| 亚洲伦理在线| 欧美一级二区| 日韩亚洲欧美中文三级| 亚洲一区免费观看| 亚洲欧洲在线一区| 亚洲欧美成aⅴ人在线观看| 国产欧亚日韩视频| 一区二区高清视频在线观看| 在线观看视频一区| 亚洲尤物在线| 亚洲伦理在线观看| 久久午夜色播影院免费高清| 亚洲在线视频网站| 欧美大片一区| 亚洲精品少妇| 亚洲国产精品激情在线观看| 亚洲字幕在线观看| 精品不卡一区| 亚洲专区国产精品| 在线视频欧美日韩精品| 亚洲欧洲一级| 一本久久a久久免费精品不卡| 欧美在线视频一区| 午夜精品久久久久久99热| 欧美日韩ab| 欧美韩日亚洲| 在线看欧美日韩| 正在播放亚洲一区| 亚洲免费在线视频一区 二区| 你懂的视频欧美| 免费在线日韩av| 亚洲成人在线视频网站| 欧美一级网站| 久久久久国产精品一区| 欧美韩国在线| 亚洲欧洲日产国码二区| 亚洲成色777777女色窝| 久久精品国产v日韩v亚洲 | 欧美日韩欧美一区二区| 欧美电影美腿模特1979在线看| 国产亚洲一区在线| 一本色道久久综合一区| 欧美一区二区在线| 国产女主播一区二区| 午夜精品美女久久久久av福利| 亚洲先锋成人| 国产精品v欧美精品v日本精品动漫| 亚洲精品国产欧美| 99国产一区| 国产精品一二三四区| 亚洲在线播放| 久久精品国产精品| 影音先锋亚洲电影| 免费欧美在线| 亚洲激情亚洲| 欧美在线免费视频| 久久久欧美精品| 国产视频自拍一区| 久久精品亚洲一区二区| 欧美11—12娇小xxxx| 最近中文字幕日韩精品| 欧美天天在线| 久久精品视频免费观看| 亚洲丁香婷深爱综合| 亚洲视频999| 国产精品揄拍500视频| 亚洲无吗在线| 亚洲第一综合天堂另类专| 一区二区三区视频观看| 国产精品丝袜91| 久久婷婷色综合| 99re热这里只有精品视频| 欧美亚洲在线| 亚洲精品麻豆| 国产亚洲欧美中文| 欧美69视频| 亚洲欧美日本国产有色| 美女诱惑黄网站一区| 亚洲婷婷在线| 亚洲国产一成人久久精品| 国产精品久久久久久久久果冻传媒 | 欧美激情第3页| 亚洲影院在线| 亚洲国产精品专区久久|