亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ 網絡編程 總結

2020-01-26 15:04:51
字體:
來源:轉載
供稿:網友

第一次用C++寫程序,對C++ 只是菜鳥級別的,倒是對C#很熟悉。兩者有很大的相似性。但也有不同。

首先寫了一個網絡通訊用的小的MFC程序。發現

(1)MFC寫界面真的好麻煩呀。用C#寫的tab 分分鐘搞定的事,用C++害得我寫了兩天.關鍵是不熟練. 還有list control 控件的圖標顯示.  真是很麻煩

         不過,由于最后的 detch() 函數執行后,就真正顯示出來了.這些具體的小細節,一般在 書上都沒有寫.

(2)用C++ 寫類的特征,基本上與C#是相似的.

說一下網絡編程的問題吧

1/一開始并不清楚 C++ 寫程序用的網絡套接字,三類的不一樣的地方.總以為我用的VS2013,用最高級別的套接字應該更容易一些,于是選用了CSOCKET 結果由于這個套接字是阻塞模式,結果被卡住了,卡住不知道如何做了.如果對方設備沒有反應,最不能死等吧,這樣不行.

于上網上搜索,發現一篇文章寫到 給 CSocket 加上超時.于時照抄照搬著做了一遍,可惜失敗了.  怎么查也查不出原因.  按原文章一字一句的比較,也沒有找出原因來.失敗換思路

2/想到低一點的 CAsyncSocket 是異步操作的.這樣總可以了吧不會阻塞了吧.但是回調函數使得處理起來也不方便.在什么時候做處理,就需要消息做處理.但是也很麻煩.

3/于是,找出書來,大部分書上對于網絡部分只是介紹了一個最基本的 Socket ,看起來也挺簡單的. 就先試一下這個最基本的吧.

沒想到 30分鐘后,網絡程序測試成功.  而且有超時接收,超時發送,等.正合我意.

原來最基本的,才是最好的.

總結一下:

     SOCKET的操作方法

以下是一個網絡客戶端的例子:

// client.cpp  #include <iostream> #include <cstdio> #include <Winsock2.h>  using namespace std;  int main() { // 加載socket動態鏈接庫(dll)   WORD wVersionRequested;   WSADATA wsaData;  // 這結構是用于接收Wjndows Socket的結構信息的   int err;       wVersionRequested = MAKEWORD( 1, 1 );  // 請求1.1版本的WinSock庫       err = WSAStartup( wVersionRequested, &wsaData );   if ( err != 0 ) {     return -1;     // 返回值為零的時候是表示成功申請WSAStartup   }       if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) {     // 檢查這個低字節是不是1,高字節是不是1以確定是否我們所請求的1.1版本     // 否則的話,調用WSACleanup()清除信息,結束函數     WSACleanup( );     return -1;    }    // 創建socket操作,建立流式套接字,返回套接字號sockClient   // SOCKET socket(int af, int type, int protocol);   // 第一個參數,指定地址簇(TCP/IP只能是AF_INET,也可寫成PF_INET)   // 第二個,選擇套接字的類型(流式套接字),第三個,特定地址家族相關協議(0為自動)   SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);  // 將套接字sockClient與遠程主機相連   // int connect( SOCKET s, const struct sockaddr* name, int namelen);   // 第一個參數:需要進行連接操作的套接字   // 第二個參數:設定所需要連接的地址信息   // 第三個參數:地址的長度   SOCKADDR_IN addrSrv;   addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");   // 本地回路地址是127.0.0.1;    addrSrv.sin_family = AF_INET;   addrSrv.sin_port = htons(6000);   connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));    char recvBuf[100];   recv(sockClient, recvBuf, 100, 0);   printf("%s/n", recvBuf);    send(sockClient, "Attention: A Client has enter.../n", strlen("Attention: A Client has enter.../n")+1, 0);    printf("我們可以聊五句話");   int n = 5;   do{     printf("/n還剩%d次:", n);     char talk[100];     printf("/nPlease enter what you want to say next(/"quit/"to exit):");     gets(talk);     send(sockClient, talk, strlen(talk)+1, 0);     // 發送信息      char recvBuf[100];     recv(sockClient, recvBuf, 100, 0);     printf("%s Says: %s/n", "Server", recvBuf);   // 接收信息   }while(--n);    printf("End linking.../n");   closesocket(sockClient);   WSACleanup();  // 終止對套接字庫的使用    printf("/n");   system("pause");   return 0; }

關于超時的處理方法

在send(),recv()過程中有時由于網絡狀況等原因,收發不能預期進行,而設置收發超時控制:

在Linux下需要注意的是時間的控制結構是struct timeval而并不是某一整型數,

在windows下是這樣寫的:

int nNetTimeout=1000;//1秒,//設置發送超時setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));//設置接收超時setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));這樣做在Linux環境下是不會產生效果的,須如下定義:struct timeval timeout = {3,0}; //設置發送超時setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));//設置接收超時setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));

有兩點注意就是:

1)recv ()的第四個參數需為MSG_WAITALL(設置MSG_DONTWAIT可以不用阻塞在建立連接后在等等接收數據),在阻塞模式下不等到指定數目的數據不會返回,除非超時時間到。還要注意的是只要設置了接收超時,在沒有MSG_WAITALL時也是有效的。說到底超時就是不讓你的程序老在那兒等,到一定時間進行一次返回而已。

2)即使等待超時時間值未到,但對方已經關閉了socket, 則此時recv()會立即返回,并收到多少數據返回多少數據。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区香蕉| 最近更新的2019中文字幕| 97国产精品免费视频| 日韩电影中文字幕在线| 色中色综合影院手机版在线观看| 色狠狠av一区二区三区香蕉蜜桃| 亚洲免费影视第一页| 日韩电影在线观看永久视频免费网站| 懂色av影视一区二区三区| 日韩亚洲综合在线| 黄色成人av网| 欧美视频在线视频| 日韩视频免费在线| 亚洲一区中文字幕在线观看| 欧美性做爰毛片| 国语自产偷拍精品视频偷| 日韩欧美国产激情| 精品视频在线观看日韩| 欧美一级bbbbb性bbbb喷潮片| 久久视频免费在线播放| 久久久久久久一区二区三区| 高跟丝袜欧美一区| 97在线精品国自产拍中文| 欧美xxxx18国产| 久久精品男人天堂| 欧美日韩中文字幕在线| 国产欧美久久久久久| 91精品在线观| 精品视频—区二区三区免费| 国产日本欧美一区| 都市激情亚洲色图| 91久久精品国产91久久性色| 成人精品在线视频| 成人欧美一区二区三区在线湿哒哒| 日韩av在线免费| 欧美日韩久久久久| 国产精品成人av性教育| 4438全国成人免费| 亚洲自拍偷拍色图| 欧美性理论片在线观看片免费| 亚洲网站在线播放| 欧美激情成人在线视频| 久久久久久美女| 日韩小视频在线观看| 午夜精品一区二区三区在线视频| 国产成人av在线播放| 97在线视频免费看| 欧美美女15p| 人九九综合九九宗合| 一本一本久久a久久精品牛牛影视| 欧美大片在线看免费观看| 久久精品亚洲精品| 午夜精品蜜臀一区二区三区免费| 日韩一区二区久久久| 国产欧美精品日韩精品| 78m国产成人精品视频| 国产在线精品成人一区二区三区| 国产伦精品一区二区三区精品视频| 亚洲精选中文字幕| 九九视频这里只有精品| 成人黄色免费在线观看| 亚洲伊人久久综合| 国产精品电影在线观看| 91在线高清免费观看| 久久91亚洲精品中文字幕| 久久久精品影院| 国产免费一区二区三区在线能观看| 日韩一区二区三区xxxx| 亚洲免费高清视频| 日本三级韩国三级久久| 国产va免费精品高清在线观看| 亚洲国产毛片完整版| 精品久久久久久久久久久久| 国产精品久久久久久久天堂| 大胆欧美人体视频| 亚洲自拍小视频免费观看| 亚洲情综合五月天| 国产成人亚洲精品| 国产福利视频一区二区| 欧美激情高清视频| 欧美精品在线视频观看| 欧美成人中文字幕在线| 欧美精品videossex88| 91精品久久久久久久久久入口| 日本三级韩国三级久久| 一本色道久久88综合日韩精品| 色综合久久88色综合天天看泰| 91精品国产综合久久久久久久久| 久久久久久一区二区三区| 久久久免费观看视频| 欧美激情a在线| 欧美日韩高清在线观看| 欧美在线激情视频| 日韩精品在线免费观看| 欧美成人黄色小视频| 久久综合色88| 久久亚洲春色中文字幕| 国产精品va在线播放我和闺蜜| 日韩av综合网| 日韩中文字幕精品视频| 日韩av在线影院| 中文字幕日韩欧美精品在线观看| 欧美日韩中文字幕日韩欧美| 成人黄色免费网站在线观看| 国产亚洲激情视频在线| 黄色精品在线看| 欧美黑人巨大精品一区二区| 亚洲福利精品在线| 91精品国产91久久久久| 2020欧美日韩在线视频| 亚洲一区久久久| 欧美激情啊啊啊| 78m国产成人精品视频| 亚洲综合在线小说| 成人做爰www免费看视频网站| 亚洲一区二区自拍| 91色琪琪电影亚洲精品久久| 欧美日韩国产精品一区二区三区四区| 日韩中文字幕精品| 91av在线免费观看视频| 97精品一区二区三区| 久久久久久久久久久网站| 国产视频丨精品|在线观看| 久久电影一区二区| 日韩欧美国产黄色| 亚洲天堂成人在线视频| 亚洲国产99精品国自产| 成人女保姆的销魂服务| 欧美日韩免费在线观看| 亚洲二区在线播放视频| 最新的欧美黄色| 欧美黑人一级爽快片淫片高清| 日韩电影中文字幕一区| 欧美一区二区色| 欧美性开放视频| 亚洲国产精品成人av| 日本精品久久电影| 2019亚洲男人天堂| 日韩中文字幕亚洲| 在线观看日韩欧美| 久久频这里精品99香蕉| 亚洲欧美日韩中文在线制服| 国产91九色视频| 国产精品99导航| 日韩av第一页| 欧美国产在线视频| 久久久久久高潮国产精品视| 精品国产区一区二区三区在线观看| 亚洲欧洲一区二区三区久久| 日韩一区二区三区在线播放| 精品国产欧美成人夜夜嗨| 日韩国产一区三区| 色综合久久久888| 国产精品91在线| 欧美国产精品va在线观看| 日本精品一区二区三区在线播放视频| 欧美成人免费在线视频| 日本久久精品视频| 九九久久精品一区| 国产精品日日摸夜夜添夜夜av| 欧美一级高清免费播放| 亚洲影影院av| 黑人巨大精品欧美一区二区免费| 色爱av美腿丝袜综合粉嫩av|