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

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

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網站

我的個人網頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495931
  • 排名 - 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 閱讀(2316) 評論(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>
              一级日韩一区在线观看| 欧美性一区二区| 国产综合香蕉五月婷在线| 国产色婷婷国产综合在线理论片a| 国产精品乱看| 性欧美大战久久久久久久久| 老司机久久99久久精品播放免费| 欧美18av| 欧美人体xx| 亚洲欧美日韩一区在线| 欧美a级片网站| 欧美久色视频| 性欧美精品高清| 久久久久久久999精品视频| 欧美日韩国产精品专区| 国产一区深夜福利| 欧美a级大片| 欧美三级第一页| 久久精品国产亚洲精品| 日韩视频中午一区| 国产精品任我爽爆在线播放| 亚洲精品欧美激情| 在线视频精品一区| 国产亚洲精品久久久| 一区二区三区**美女毛片| 久久资源在线| 欧美性做爰毛片| 另类综合日韩欧美亚洲| 亚洲尤物影院| 亚洲激情一区二区| 亚洲主播在线播放| 亚洲日本中文字幕区| 另类av一区二区| 国产精品九色蝌蚪自拍| 亚洲美女尤物影院| 欧美一区二区三区在线| 国产精品久久久久影院色老大| 亚洲美女精品成人在线视频| 免费亚洲电影| 国产免费亚洲高清| 亚洲日本国产| 黄色在线成人| 亚洲一区观看| 亚洲一二区在线| 可以看av的网站久久看| 一区二区三区在线观看欧美| 久久五月婷婷丁香社区| 欧美一区二区三区视频在线| 国产区精品视频| 日韩一级大片| 亚洲精品视频在线观看网站| 亚洲国产成人精品女人久久久| 麻豆久久久9性大片| 在线观看欧美成人| 欧美亚洲自偷自偷| 亚洲综合导航| 欧美无乱码久久久免费午夜一区| 99国产精品国产精品久久| 亚洲激情另类| 亚洲精品久久久蜜桃| 亚洲黄色在线| 亚洲人成人一区二区在线观看| 亚洲第一天堂无码专区| 欧美成人精品一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆 | 在线视频免费在线观看一区二区| 亚洲精品自在在线观看| 国产精品扒开腿做爽爽爽视频| 午夜国产精品视频免费体验区| 亚洲制服丝袜在线| 亚洲在线免费| 国产精品电影观看| 亚洲午夜av| 欧美中文字幕精品| 国产欧美日韩在线视频| 欧美成人高清视频| 尤物网精品视频| 久久综合久久美利坚合众国| av72成人在线| 欧美亚男人的天堂| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲伦理精品| 欧美日韩久久精品| 一区二区三区日韩| 欧美有码在线观看视频| 欧美精品一区二区三区视频| 久久黄色级2电影| 一区二区三区在线免费播放| 一区二区国产精品| 欧美在线视频免费观看| 免费在线看成人av| 亚洲欧洲精品一区二区精品久久久| 国产精品盗摄久久久| 免费在线成人| 在线视频欧美日韩| 国产欧美精品xxxx另类| 亚洲人成在线观看| 午夜精品久久久| 樱花yy私人影院亚洲| 午夜视频在线观看一区| 亚洲天堂免费观看| 韩国亚洲精品| 欧美午夜不卡在线观看免费| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲黄色小视频| 国产精品裸体一区二区三区| 亚洲国产日韩欧美在线动漫| 国产最新精品精品你懂的| 在线中文字幕不卡| 老司机凹凸av亚洲导航| 国产丝袜美腿一区二区三区| 亚洲手机在线| 亚洲国产高清aⅴ视频| 一区二区三区在线观看国产| 欧美亚洲日本网站| 亚洲精品免费在线播放| 最新国产成人在线观看| 老司机凹凸av亚洲导航| 欧美 日韩 国产在线 | 国产精品国产三级国产专播精品人| 亚洲高清不卡av| 久久久久久免费| 性欧美长视频| 亚洲视频 欧洲视频| 欧美三级小说| 欧美国产一区二区| 午夜精品久久久久久久男人的天堂| 亚洲永久免费精品| 亚洲国产精品久久| 国产主播一区二区三区| 久久精品国产免费| 亚洲一区二区成人| 亚洲精选在线| 亚洲欧洲精品一区| 欧美激情乱人伦| 免费观看一级特黄欧美大片| 亚洲国产你懂的| 一区二区在线观看视频| 麻豆国产精品777777在线 | 免费观看亚洲视频大全| 91久久精品国产| 在线日韩av片| 亚洲福利国产| 亚洲精品欧美在线| 亚洲欧洲精品一区二区三区| 欧美日韩在线不卡| 欧美日韩成人精品| 欧美激情精品| 欧美精品在线网站| 欧美日韩国产一区二区三区| 亚洲男人的天堂在线aⅴ视频| 久久久久久噜噜噜久久久精品| 亚洲国产精品成人va在线观看| 欧美日本韩国一区| 欧美激情综合| 欧美日韩国产在线播放网站| 午夜欧美不卡精品aaaaa| 欧美电影免费观看高清完整版| 99视频精品全国免费| 国产乱码精品| 国内精品久久久久久久果冻传媒| 欧美高清自拍一区| 欧美激情综合亚洲一二区| 亚洲一区二区三区精品视频| 女生裸体视频一区二区三区| 亚洲欧美国产精品va在线观看| 一区在线播放视频| 亚洲成在人线av| 99国内精品| 亚洲欧美另类久久久精品2019| 在线观看成人av| 日韩视频三区| 性久久久久久久| 欧美99在线视频观看| 欧美在线视频网站| 浪潮色综合久久天堂| 午夜久久久久久| 免费成年人欧美视频| 久久激情视频久久| 欧美黄色一级视频| 一本色道久久综合一区| 亚洲国产人成综合网站| 久久一区二区三区超碰国产精品| 亚洲一区视频在线| 久久久久久久97| 亚洲欧洲在线视频| 亚洲欧美在线x视频| 在线视频欧美日韩| 久久久久久久性| 国产精品免费网站| 最近看过的日韩成人| 亚洲第一二三四五区| 红桃视频成人| 亚洲欧美日本国产有色| 亚洲免费视频观看| 欧美国产先锋| 久久精品二区三区| 国产精品日韩精品欧美在线| 国产精品男女猛烈高潮激情 | av成人免费观看|