• <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 楊粼波 閱讀(6371) 評論(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 楊粼波

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

            伊人久久大香线蕉综合5g| 久久久久国产一级毛片高清板| 香蕉aa三级久久毛片| 2020国产成人久久精品| 99精品国产99久久久久久97| 久久狠狠高潮亚洲精品| 久久91精品综合国产首页| 中文字幕久久久久人妻| 国产日韩久久免费影院| 影音先锋女人AV鲁色资源网久久| 久久国产亚洲精品麻豆| 伊人久久大香线蕉av一区| 国产69精品久久久久99尤物| 久久夜色精品国产噜噜麻豆| 久久午夜福利电影| 93精91精品国产综合久久香蕉| 亚洲精品乱码久久久久久蜜桃不卡| 91麻精品国产91久久久久| 久久精品无码午夜福利理论片| 久久久久无码精品| A级毛片无码久久精品免费| 久久亚洲精品成人av无码网站| 亚洲婷婷国产精品电影人久久 | 国产69精品久久久久9999APGF| 久久综合丝袜日本网| 精品久久无码中文字幕| A级毛片无码久久精品免费| 久久国产亚洲精品| 久久天天躁狠狠躁夜夜2020老熟妇| 久久精品国产99国产精偷| 久久国产精品一国产精品金尊| 97精品依人久久久大香线蕉97| 精品久久久久久国产| 久久亚洲国产成人影院| 狠狠色丁香久久婷婷综合_中| 中文字幕精品久久久久人妻| 亚洲精品无码久久毛片| 三级三级久久三级久久| 久久精品国产久精国产果冻传媒| 久久天天躁夜夜躁狠狠| 久久久久亚洲精品天堂|