• <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://m.shnenglu.com/tx7do/articles/5966.html  回復  更多評論   

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

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

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

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

            99久久亚洲综合精品成人| 日日狠狠久久偷偷色综合96蜜桃| 久久亚洲色一区二区三区| 国产香蕉久久精品综合网| 久久香蕉国产线看观看99| 国产亚洲美女精品久久久2020| 久久精品国产一区二区三区日韩| 久久天天躁狠狠躁夜夜2020一| 99久久精品免费国产大片| 久久久久久av无码免费看大片| 亚洲一本综合久久| 久久久www免费人成精品| 99久久综合狠狠综合久久止| 欧洲精品久久久av无码电影| 亚洲中文久久精品无码| 国产成人精品久久亚洲| 国内精品伊人久久久久777| 国产福利电影一区二区三区,免费久久久久久久精 | 青青热久久国产久精品| 久久综合给合久久狠狠狠97色69| 国产精品久久久99| 国产精品久久久久国产A级| 久久青青草原精品国产| 亚洲狠狠婷婷综合久久蜜芽| 久久人人爽人人爽人人片AV高清| 99精品久久久久中文字幕| 久久九九兔免费精品6| 久久综合久久伊人| 国产高清国内精品福利99久久| 亚洲中文字幕无码久久2017| 少妇无套内谢久久久久| 久久这里只有精品视频99| 国产女人aaa级久久久级| 91久久国产视频| 精品久久久久久综合日本| 97热久久免费频精品99| 国内精品久久久人妻中文字幕| 久久综合给合久久狠狠狠97色| 久久人人爽爽爽人久久久| 国产精品久久久久国产A级| 国产精品久久一区二区三区|