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

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Windows 下的最簡單的TCP服務器客戶端

            他們是短連接的,服務器接受客戶端之后,馬上發送一個消息,發送完以后立即將客戶端斷開掉,然后繼續等待下一個連接.


            使用Winsocket2必須要引用到的頭文件和需要包含到的鏈接庫文件:

            #include <WinSock2.h>
            #pragma comment( lib, 
            "ws2_32.lib" )



            以下代碼是Winsocket2的系統初始化和關閉的封裝代碼.

            class WinSocketSystem
            {
            public:
                WinSocketSystem()
                
            {
                    
            int iResult = WSAStartup( MAKEWORD( 22 ), &wsaData );
                    
            if (iResult != NO_ERROR)
                    
            {
                        exit(
            -1);
                    }

                }


                
            ~WinSocketSystem()
                
            {
                    WSACleanup();
                }


            protected:
                WSADATA wsaData;
            }
            ;

            static WinSocketSystem g_winsocketsystem;


            服務器端代碼:
            class TCPServer
            {
            public:
                TCPServer()
                    : mServerSocket(INVALID_SOCKET)
                
            {
                    
            // 創建套接字
                    mServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
                    
            if (mServerSocket == INVALID_SOCKET)
                    
            {
                        std::cout 
            << "創建套接字失敗!" << std::endl;
                        
            return;
                    }


                    
            // 填充服務器的IP和端口號
                    mServerAddr.sin_family        = AF_INET;
                    mServerAddr.sin_addr.s_addr    
            = INADDR_ANY;
                    mServerAddr.sin_port        
            = htons((u_short)SERVER_PORT);

                    
            // 綁定IP和端口
                    if ( ::bind(mServerSocket, (sockaddr*)&mServerAddr, sizeof(mServerAddr)) == SOCKET_ERROR)
                    
            {
                        std::cout 
            << "綁定IP和端口失敗!" << std::endl;
                        
            return;
                    }


                    
            // 監聽客戶端請求,最大同時連接數設置為10.
                    if ( ::listen(mServerSocket, SOMAXCONN) == SOCKET_ERROR)
                    
            {
                        std::cout 
            << "監聽端口失敗!" << std::endl;
                        
            return;
                    }


                    std::cout 
            << "啟動TCP服務器成功!" << std::endl;
                }


                
            ~TCPServer()
                
            {
                    ::closesocket(mServerSocket);
                    std::cout 
            << "關閉TCP服務器成功!" << std::endl;
                }


                
            void run()
                
            {
                    
            int nAcceptAddrLen = sizeof(mAcceptAddr);
                    
            for (;;)
                    
            {
                        
            // 以阻塞方式,等待接收客戶端連接
                        mAcceptSocket = ::accept(mServerSocket, (struct sockaddr*)&mAcceptAddr, &nAcceptAddrLen);
                        std::cout 
            << "接受客戶端IP:" << inet_ntoa(mAcceptAddr.sin_addr) << std::endl;

                        
            // 發送消息
                        int ret = ::send(mAcceptSocket, SEND_STRING, (int)strlen(SEND_STRING), 0);
                        
            if (ret != 0)
                        
            {
                            std::cout 
            << "發送消息成功!" << std::endl;
                        }


                        
            // 關閉客戶端套接字
                        ::closesocket(mAcceptSocket);
                        std::cout 
            << "斷開客戶端端成功!" << std::endl;
                    }

                }


            private:
                SOCKET        mServerSocket;    
            ///< 服務器套接字句柄
                sockaddr_in    mServerAddr;    ///< 服務器地址

                SOCKET        mAcceptSocket;    ///< 接受的客戶端套接字句柄
                sockaddr_in    mAcceptAddr;    ///< 接收的客戶端地址
            };


            int _tmain(int argc, _TCHAR* argv[])
            {
                TCPServer server;
                server.run();

                
            return 0;
            }


            客戶端代碼:
            class TCPClient
            {
            public:
                TCPClient()
                
            {
                    
            // 創建套接字
                    mServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
                    
            if (mServerSocket == INVALID_SOCKET)
                    
            {
                        std::cout 
            << "創建套接字失敗!" << std::endl;
                        
            return;
                    }


                    
            // 填充服務器的IP和端口號
                    mServerAddr.sin_family        = AF_INET;
                    mServerAddr.sin_addr.s_addr    
            = inet_addr(SERVER_IP);
                    mServerAddr.sin_port        
            = htons((u_short)SERVER_PORT);

                    
            // 連接到服務器
                    if ( ::connect(mServerSocket, (struct sockaddr*)&mServerAddr, sizeof(mServerAddr)))
                    
            {
                        ::closesocket(mServerSocket);
                        std::cout 
            << "連接服務器失敗!" << std::endl;
                        
            return;    
                    }

                }


                
            ~TCPClient()
                
            {
                    ::closesocket(mServerSocket);
                }


                
            void run()
                
            {
                    
            int nRecvSize = 0;
                    
            char buff[BUFFER_SIZE];
                    memset(buff, 
            0sizeof(buff) );
                    
            while (nRecvSize = ::recv(mServerSocket, buff, BUFFER_SIZE, 0) )
                    
            {
                        
            if (mServerSocket == INVALID_SOCKET)
                        
            {                
                            
            break;
                        }


                        std::cout 
            << buff << std::endl;
                    }


                    std::cout 
            << "已經和服務器斷開連接!" << std::endl;
                }


            private:
                SOCKET        mServerSocket;    
            ///< 服務器套接字句柄
                sockaddr_in    mServerAddr;    ///< 服務器地址
            };



            int _tmain(int argc, _TCHAR* argv[])
            {
                TCPClient client;
                client.run();

                system(
            "pause");
                
            return 0;
            }



            源代碼下載:
            服務器端代碼: testTCPServer.rar
            客戶端代碼: testTCPClient.rar

            posted on 2010-06-10 21:57 楊粼波 閱讀(6360) 評論(4)  編輯 收藏 引用 所屬分類: 原創文章網絡編程

            評論

            # re: Windows 下的最簡單的TCP服務器客戶端 2010-06-10 23:45 EaiLFly

            太謝謝了,我剛好要寫個TCP的課程設計,參考一下  回復  更多評論   

            # re: Windows 下的最簡單的TCP服務器客戶端 2010-06-10 23:48 楊粼波

            我這里還有一個Linux的簡單TCP服務器客戶端:
            http://www.shnenglu.com/tx7do/articles/5966.html  回復  更多評論   

            # re: Windows 下的最簡單的TCP服務器客戶端 2010-06-11 09:51 zuhd

            發這個代碼?你想干嘛呢?最近很活躍啊  回復  更多評論   

            # re: Windows 下的最簡單的TCP服務器客戶端[未登錄] 2010-06-11 19:43 楊粼波

            我閑的發慌,哈哈哈.....  回復  更多評論   

            久久久久亚洲av毛片大| 久久精品视频网| 久久精品国产日本波多野结衣| 看全色黄大色大片免费久久久 | 久久精品a亚洲国产v高清不卡| 久久99国产综合精品免费| 91精品国产91久久久久久青草 | 亚洲欧洲中文日韩久久AV乱码| 欧美精品乱码99久久蜜桃| 国产精品对白刺激久久久| 亚洲?V乱码久久精品蜜桃| 久久国产精品99精品国产987| 日韩精品无码久久一区二区三| 人妻精品久久无码专区精东影业| 精品久久久久久99人妻| 亚洲综合熟女久久久30p| 国产农村妇女毛片精品久久| 色欲久久久天天天综合网精品 | 国产国产成人久久精品| 久久久久波多野结衣高潮| 久久精品成人影院| 久久久久久久99精品免费观看| 一本色道久久88精品综合| 久久人人爽人爽人人爽av| 99久久精品免费国产大片| 久久九九精品99国产精品| 久久久久久曰本AV免费免费| 久久久无码精品午夜| 久久国产影院| 国产精品成人无码久久久久久 | 18岁日韩内射颜射午夜久久成人| 天天躁日日躁狠狠久久| 婷婷综合久久中文字幕蜜桃三电影| 久久久精品波多野结衣| 久久久久国产| 狠狠久久综合| 精品久久久久久久国产潘金莲| 亚洲精品tv久久久久| 久久狠狠爱亚洲综合影院| 狠狠色丁香久久婷婷综合| 伊人久久大香线蕉av不卡|