• <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>

            Jiwu Bu

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              32 隨筆 :: 0 文章 :: 25 評論 :: 0 Trackbacks
            Windows下Socket編程主要包括以下幾部分:
            服務(wù)端
               1、初始化Windows Socket庫。
               2、創(chuàng)建Socket。
               3、綁定Socket。
               4、監(jiān)聽。
               5、Accept。
               6、接收、發(fā)送數(shù)據(jù)。

            客戶端
               1、初始化Windows Socket庫。
               2、創(chuàng)建Socket。
               3、連接Socket。
               4、接收、發(fā)送數(shù)據(jù)。

            服務(wù)端每接收到一個(gè)客戶端的Socket,則創(chuàng)建一個(gè)線程。滿足一個(gè)服務(wù)端連接多個(gè)客戶端。

              1 //Server.cpp
              2 #include <iostream>
              3 #include <Windows.h>
              4 
              5 using namespace std;
              6 
              7 #define  PORT 4000
              8 #define  IP_ADDRESS "192.168.1.145"
              9 
             10 DWORD WINAPI ClientThread(LPVOID lpParameter)
             11 {
             12     SOCKET CientSocket = (SOCKET)lpParameter;
             13     int Ret = 0;
             14     char RecvBuffer[MAX_PATH];
             15 
             16     while ( true )
             17     {
             18         memset(RecvBuffer, 0x00sizeof(RecvBuffer));
             19         Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
             20         if ( Ret == 0 || Ret == SOCKET_ERROR ) 
             21         {
             22             cout<<"客戶端退出!"<<endl;
             23             break;
             24         }
             25         cout<<"接收到客戶信息為:"<<RecvBuffer<<endl;
             26     }
             27 
             28     return 0;
             29 }
             30 
             31 int main(int argc, char* argv[])
             32 {
             33     WSADATA  Ws;
             34     SOCKET ServerSocket, CientSocket;
             35     struct sockaddr_in LocalAddr, ClientAddr;
             36     int Ret = 0;
             37     int AddrLen = 0;
             38     HANDLE hThread = NULL;
             39 
             40     //Init Windows Socket
             41     if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
             42     {
             43         cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
             44         return -1;
             45     }
             46     
             47     //Create Socket
             48     ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
             49     if ( ServerSocket == INVALID_SOCKET )
             50     {
             51         cout<<"Create Socket Failed::"<<GetLastError()<<endl;
             52         return -1;
             53     }
             54 
             55     LocalAddr.sin_family = AF_INET;
             56     LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
             57     LocalAddr.sin_port = htons(PORT);
             58     memset(LocalAddr.sin_zero, 0x008);
             59 
             60     //Bind Socket
             61     Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
             62     if ( Ret != 0 )
             63     {
             64         cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
             65         return -1;
             66     }
             67 
             68     Ret = listen(ServerSocket, 10);
             69     if ( Ret != 0 )
             70     {
             71         cout<<"listen Socket Failed::"<<GetLastError()<<endl;
             72         return -1;
             73     }
             74 
             75     cout<<"服務(wù)端已經(jīng)啟動"<<endl;
             76 
             77     while ( true )
             78     {
             79         AddrLen = sizeof(ClientAddr);
             80         CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
             81         if ( CientSocket == INVALID_SOCKET )
             82         {
             83             cout<<"Accept Failed::"<<GetLastError()<<endl;
             84             break;
             85         }
             86 
             87         cout<<"客戶端連接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl;
             88         
             89         hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);
             90         if ( hThread == NULL )
             91         {
             92             cout<<"Create Thread Failed!"<<endl;
             93             break;
             94         }
             95 
             96         CloseHandle(hThread);
             97     }
             98 
             99     closesocket(ServerSocket);
            100     closesocket(CientSocket);
            101     WSACleanup();
            102 
            103     return 0;
            104 }

             1 //Client.cpp
             2 #include <iostream>
             3 #include <Windows.h>
             4 
             5 using namespace std;
             6 
             7 #define  PORT 4000
             8 #define  IP_ADDRESS "192.168.1.145"
             9 
            10 
            11 int main(int argc, char* argv[])
            12 {
            13     WSADATA  Ws;
            14     SOCKET CientSocket;
            15     struct sockaddr_in ServerAddr;
            16     int Ret = 0;
            17     int AddrLen = 0;
            18     HANDLE hThread = NULL;
            19     char SendBuffer[MAX_PATH];
            20 
            21     //Init Windows Socket
            22     if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
            23     {
            24         cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
            25         return -1;
            26     }
            27 
            28     //Create Socket
            29     CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
            30     if ( CientSocket == INVALID_SOCKET )
            31     {
            32         cout<<"Create Socket Failed::"<<GetLastError()<<endl;
            33         return -1;
            34     }
            35 
            36     ServerAddr.sin_family = AF_INET;
            37     ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
            38     ServerAddr.sin_port = htons(PORT);
            39     memset(ServerAddr.sin_zero, 0x008);
            40 
            41     Ret = connect(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
            42     if ( Ret == SOCKET_ERROR )
            43     {
            44         cout<<"Connect Error::"<<GetLastError()<<endl;
            45         return -1;
            46     }
            47     else
            48     {
            49         cout<<"連接成功!"<<endl;
            50     }
            51 
            52     while ( true )
            53     {
            54         cin.getline(SendBuffer, sizeof(SendBuffer));
            55         Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
            56         if ( Ret == SOCKET_ERROR )
            57         {
            58             cout<<"Send Info Error::"<<GetLastError()<<endl;
            59             break;
            60         }
            61     }
            62     
            63     closesocket(CientSocket);
            64     WSACleanup();
            65 
            66     return 0;
            67 }

            Windows Socket編程
            posted on 2009-01-11 11:27 bujiwu 閱讀(50307) 評論(9)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: Windows Socket編程 2009-09-24 14:42 濤子
            謝謝!  回復(fù)  更多評論
              

            # re: Windows Socket編程 2012-08-27 17:35 did
            謝謝,學(xué)習(xí)了  回復(fù)  更多評論
              

            # re: Windows Socket編程 2012-09-05 22:54 Kaven
            VS2005下要變成這樣子才可以編譯成功
            //Server.cpp
            #include "stdafx.h"
            #include <iostream>
            #include <winsock2.h>
            #pragma comment(lib,"ws2_32.lib")
            #include <Windows.h>
            ============================
            //Client.cpp
            #include "stdafx.h"
            #include <iostream>
            #include <winsock2.h>
            #pragma comment(lib,"ws2_32.lib")
            #include <Windows.h>
              回復(fù)  更多評論
              

            # re: Windows Socket編程[未登錄] 2012-09-13 11:13 1
            謝謝@Kaven
              回復(fù)  更多評論
              

            # re: Windows Socket編程 2012-10-15 13:49 zhenw0
            我感覺客戶端能再加上 接受消息的功能 那就最好啦  回復(fù)  更多評論
              

            # re: Windows Socket編程 2013-08-11 14:09 Ruby
            1>------ 已開始建置: 專案: socket server, 組態(tài): Debug Win32 ------
            1> socket server.cpp
            1>c:\users\asus\documents\visual studio 2010\projects\socket server\socket server\socket server.cpp(2): fatal error C1083: 無法開啟先行編譯標(biāo)頭檔檔案: 'Debug\socket server.pch': No such file or directory
            ========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
            我該怎麼處理?  回復(fù)  更多評論
              

            # re: Windows Socket編程 2013-10-05 16:18 zwh
            線程中與客戶端通信結(jié)束后未關(guān)閉clientSocket  回復(fù)  更多評論
              

            # re: Windows Socket編程 2013-10-21 23:24 Spix Mojo
            客戶端和用戶端是分開的嗎?  回復(fù)  更多評論
              

            # re: Windows Socket編程 2015-07-01 16:32 langl
            @Ruby
            項(xiàng)目-屬性-配置屬性-清單工具-輸入輸出-嵌入清單 選擇否  回復(fù)  更多評論
              

            蜜桃麻豆www久久| 亚洲va中文字幕无码久久| 久久99精品国产麻豆婷婷| 色播久久人人爽人人爽人人片aV| 亚洲伊人久久精品影院 | 婷婷久久香蕉五月综合加勒比| 人妻无码久久一区二区三区免费 | 久久99免费视频| 国内高清久久久久久| 国产精品久久久99| 国产精品99久久不卡| 亚洲AV无码一区东京热久久| 91精品国产91热久久久久福利| 久久精品国产99国产精品澳门| 欧美精品九九99久久在观看| 久久精品国产精品亚洲下载| 99久久精品无码一区二区毛片 | 无码精品久久久久久人妻中字| 国产精品免费久久久久久久久| 亚洲乱码中文字幕久久孕妇黑人| 精品久久国产一区二区三区香蕉| 久久夜色精品国产噜噜麻豆| 久久伊人五月丁香狠狠色| 国内精品九九久久精品| 久久精品人妻一区二区三区| www.久久99| 99久久精品费精品国产 | 久久人人爽人人爽人人片AV麻豆| 国产亚洲成人久久| 91精品国产高清91久久久久久| 久久精品国产乱子伦| 国产成年无码久久久久毛片| 久久美女网站免费| 99久久99这里只有免费的精品| 亚洲人成精品久久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久久一本精品99久久精品66| 精品久久久久久亚洲精品| 国产成人无码精品久久久性色 | 久久国产免费观看精品| 国产精品久久精品|