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

            牽著老婆滿街逛

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

            Windows 下的最簡單的TCP服務(wù)器客戶端

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


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

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



            以下代碼是Winsocket2的系統(tǒng)初始化和關(guān)閉的封裝代碼.

            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;


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


                    
            // 填充服務(wù)器的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;
                    }


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


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


                
            ~TCPServer()
                
            {
                    ::closesocket(mServerSocket);
                    std::cout 
            << "關(guān)閉TCP服務(wù)器成功!" << 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;

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


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

                }


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

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


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

                
            return 0;
            }


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


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

                    
            // 連接到服務(wù)器
                    if ( ::connect(mServerSocket, (struct sockaddr*)&mServerAddr, sizeof(mServerAddr)))
                    
            {
                        ::closesocket(mServerSocket);
                        std::cout 
            << "連接服務(wù)器失敗!" << 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 
            << "已經(jīng)和服務(wù)器斷開連接!" << std::endl;
                }


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



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

                system(
            "pause");
                
            return 0;
            }



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

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

            評論

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

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

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

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

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

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

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

            我閑的發(fā)慌,哈哈哈.....  回復(fù)  更多評論   

            一97日本道伊人久久综合影院| 91亚洲国产成人久久精品网址| 久久国产亚洲精品| 亚洲日韩中文无码久久| 99精品久久精品一区二区| 久久国产精品成人片免费| 中文精品久久久久国产网址 | 久久人人妻人人爽人人爽| 久久久国产乱子伦精品作者| 色综合久久天天综合| 亚洲人成网站999久久久综合| 蜜臀av性久久久久蜜臀aⅴ| 99久久综合国产精品二区| 一级做a爰片久久毛片看看| 久久久久99精品成人片欧美| 九九久久精品国产| 久久久久亚洲AV无码麻豆| 免费一级欧美大片久久网| 麻豆成人久久精品二区三区免费| 国产精品免费久久久久影院| 亚洲人成网亚洲欧洲无码久久| 久久综合综合久久97色| 国内精品人妻无码久久久影院导航| 久久青青草原国产精品免费| 久久无码AV一区二区三区| 999久久久国产精品| 嫩草伊人久久精品少妇AV| 久久久久99精品成人片三人毛片 | 国产成人精品久久亚洲| 久久天天躁夜夜躁狠狠躁2022| 久久国产成人午夜aⅴ影院| 一本久久a久久精品综合香蕉| 久久99热只有频精品8| 欧美日韩精品久久久久| 亚洲国产精品久久久久久| 久久99精品久久久久婷婷| 人妻无码精品久久亚瑟影视 | 中文字幕日本人妻久久久免费| 久久99精品久久久久久野外| a高清免费毛片久久| 亚洲αv久久久噜噜噜噜噜|