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

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

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網站

我的個人網頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 494500
  • 排名 - 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>
              欧美v日韩v国产v| 欧美影院视频| 亚洲一区二区三区视频播放| 国产精品天天摸av网| 欧美高清在线观看| 欧美三级在线视频| 国产精品久久久999| 国产欧美日韩三级| 国产一区二区三区的电影| 国产裸体写真av一区二区| 国产日韩精品在线观看| 黑人巨大精品欧美黑白配亚洲| 在线观看av不卡| 亚洲中无吗在线| 欧美一区二区三区婷婷月色| 伊人久久婷婷| 一区二区国产精品| 欧美在线资源| 欧美r片在线| 99精品欧美一区二区三区| 欧美一区三区三区高中清蜜桃 | 亚洲人成免费| 欧美激情va永久在线播放| 久久乐国产精品| 欧美中文在线免费| 欧美成人在线免费观看| 国产欧美日韩在线播放| 亚洲狼人综合| 亚洲国产99| 久久人人爽人人| 韩国免费一区| 蜜乳av另类精品一区二区| 亚洲欧美在线网| 国产欧美91| 久久久99爱| 先锋a资源在线看亚洲| 国产精品理论片| 香蕉乱码成人久久天堂爱免费| 欧美激情日韩| 麻豆成人在线观看| 亚洲精品视频在线看| 亚洲国产精品第一区二区| 麻豆成人综合网| 午夜精品福利视频| 久久狠狠久久综合桃花| 伊人激情综合| 国产精品网站在线观看| 亚洲免费一在线| 欧美影片第一页| 亚洲日本中文字幕免费在线不卡| 欧美成人一二三| 欧美视频亚洲视频| 久久香蕉国产线看观看网| 欧美高潮视频| 欧美在线日韩| 欧美日韩国产另类不卡| 久久久九九九九| 欧美人体xx| 麻豆精品传媒视频| 国产精品视频导航| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品成人国产乱一区| 久久亚洲私人国产精品va媚药| 欧美日韩一区二区免费在线观看 | 国产一区二区福利| 欧美激情精品久久久久久变态 | 国产精品99久久久久久www| 国产综合久久| 午夜宅男欧美| 午夜在线精品偷拍| 欧美性猛交xxxx乱大交蜜桃 | 亚洲国产岛国毛片在线| 国产午夜精品麻豆| 午夜精品一区二区在线观看| 一区二区免费在线视频| 久久婷婷麻豆| 狠狠入ady亚洲精品经典电影| 亚洲麻豆av| 亚洲欧美另类国产| 国产伦精品一区二区三区免费 | 欧美1区2区视频| 国内久久精品| 裸体女人亚洲精品一区| 亚洲人成啪啪网站| 亚洲欧美国产三级| 影音先锋久久精品| 欧美日本一区| 欧美在线观看视频一区二区| 免费观看国产成人| aa级大片欧美| 国产亚洲二区| 欧美成年网站| 先锋资源久久| 亚洲精品在线观看免费| 亚洲福利在线观看| 久久精品综合| aa国产精品| 欧美成人精品在线| 久久超碰97人人做人人爱| 亚洲电影免费在线观看| 国产精品久久久久婷婷| 久久人人爽人人爽| 欧美综合国产| 亚洲在线视频免费观看| 亚洲黄色影片| 亚洲成人在线视频播放 | 久久久久久亚洲精品杨幂换脸| 一区在线影院| 国产视频一区欧美| 欧美午夜在线| 国产精品高精视频免费| 欧美激情国产高清| 欧美大色视频| 欧美成人性网| 欧美大片在线观看| 欧美日韩成人综合在线一区二区| 美国三级日本三级久久99| 久久成人精品电影| 久久久久久网站| 免费看亚洲片| 欧美日韩国产在线播放| 欧美日韩在线免费| 国产视频亚洲精品| 亚洲电影av| 亚洲在线观看| 久久资源在线| 亚洲欧洲在线免费| 亚洲视频网在线直播| 欧美在线免费看| 欧美精品免费播放| 国产精品日韩一区| 亚洲精品综合久久中文字幕| 亚洲性人人天天夜夜摸| 久久久久久成人| 91久久精品美女| 午夜一区在线| 欧美日韩在线观看视频| 亚洲激情另类| 久久久青草青青国产亚洲免观| 欧美高清在线一区二区| 亚洲色诱最新| 欧美精品观看| 亚洲精品1区2区| 免费亚洲视频| 久久久久久久久久久成人| 国产精品网站在线观看| 一区二区三区不卡视频在线观看 | 日韩一级片网址| 老巨人导航500精品| 99re6这里只有精品| 在线视频你懂得一区| 久久综合九色| 怡红院精品视频| 久久先锋影音| 久久一区二区三区四区| 国产农村妇女精品一二区| 亚洲永久在线观看| 亚洲视频免费在线观看| 欧美四级在线观看| 亚洲免费视频网站| 亚洲永久精品国产| 国产亚洲成精品久久| 老司机精品导航| 欧美激情精品久久久六区热门| 极品少妇一区二区三区精品视频| 亚洲欧美日韩精品久久| 亚洲一区二区三区四区中文| 国产精品久久看| 久久久精品网| 欧美日韩高清免费| 久久精品一区中文字幕| 美女国产一区| 欧美亚洲色图校园春色| 裸体素人女欧美日韩| 亚洲在线成人| 欧美激情精品久久久久久黑人| 性欧美超级视频| 久久中文欧美| 久久乐国产精品| 国产精品久久9| 亚洲日本va在线观看| 国产麻豆视频精品| 亚洲精品一区二区三区不| 国产视频亚洲精品| 中文国产一区| 亚洲小说欧美另类婷婷| 麻豆精品视频在线| 久久精品国产一区二区三区| 欧美理论视频| 亚洲精品一二三| 99在线精品视频| 欧美国产激情二区三区| 国产亚洲精品美女| 午夜免费电影一区在线观看| 亚洲特黄一级片| 国产精品欧美经典| 亚洲欧洲av一区二区三区久久| 亚洲专区一区二区三区| 国产精品夜色7777狼人| 午夜久久黄色|