詳談C++ socket網(wǎng)絡(luò)編程實(shí)例
功能
實(shí)現(xiàn)基于sokcet的Cpp服務(wù)端
TIPS:功能包括接收客戶端的數(shù)據(jù),向客戶端發(fā)送數(shù)據(jù)。
源碼
#define _WINSOCK_DEPRECATED_NO_WARNINGS #include <iostream> //#include <windows.h> #include <WinSock2.h> #pragma comment(lib,"ws2_32") using std::cout; using std::endl; using std::cin; int main() { system("chcp 65001"); //SetConsoleOutputCP(65001); WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData);//啟動(dòng)window動(dòng)態(tài)網(wǎng)絡(luò)庫(kù) //1.創(chuàng)建socket //SOCKET == 句柄 == 文件描述符 == 套接字 //socket(協(xié)議族類型,協(xié)議類型,0); //協(xié)議族類型 IPV4(AF_INET) IPV6 //協(xié)議類型 TCP(SOCK_STREAM),UDP(SOCK_DROP) SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);//IPPROTO_TCP if (serverSocket == INVALID_SOCKET) { cout << "創(chuàng)建socket失敗" << endl; return 0; } //2.綁定ip和端口號(hào) //127.0.0.1 永遠(yuǎn)指向本機(jī) //0.0.0.o 綁定所有網(wǎng)卡的ip SOCKADDR_IN serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(7890);//host to networks short,將主機(jī)字節(jié)序轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序 serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");//點(diǎn)分十進(jìn)制轉(zhuǎn)換為10進(jìn)制 if (SOCKET_ERROR == bind(serverSocket, (sockaddr *)&serverAddr, sizeof(SOCKADDR_IN))) { cout << "bind 失敗" << endl; return 0; } cout << "bind 成功" << endl; //3.監(jiān)聽,提示本機(jī)的操作系統(tǒng) if (INVALID_SOCKET == listen(serverSocket, 5)) { cout << "listen 失敗" << endl; return 0; } cout << "listen 成功" << endl; while(true) { //4.等待客戶端連接 SOCKADDR_IN clientAddr; int addrLen = sizeof(SOCKADDR_IN); SOCKET clientSocket = accept(serverSocket, (SOCKADDR *)&clientAddr, &addrLen); if (INVALID_SOCKET == clientSocket) { cout << "客戶端連接失敗 " << endl; return 0; } cout << "client ok " << inet_ntoa(clientAddr.sin_addr) << endl; cout << "port " << ntohs(clientAddr.sin_port) << endl; //5.收發(fā)數(shù)據(jù) //接收數(shù)據(jù) char recvBuffer[1024]{ 0 }; int nRecv = recv(clientSocket, recvBuffer, 1024, 0); cout << "recvLen:" << nRecv << "內(nèi)容:" << recvBuffer << endl; //發(fā)送數(shù)據(jù) int nSend = send(clientSocket, recvBuffer, nRecv, 0); cout << "send Len:" << nSend << endl; //6.關(guān)閉客戶端 closesocket(clientSocket); } //7.關(guān)閉服務(wù)端 closesocket(serverSocket); WSACleanup();//卸載window動(dòng)態(tài)網(wǎng)絡(luò)庫(kù) return 0; }
效果
TIPS:利用sokit模擬工具模擬一個(gè)客戶端終端。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解
- C++?Socket實(shí)現(xiàn)TCP與UDP網(wǎng)絡(luò)編程
- 詳談C++ socket網(wǎng)絡(luò)編程實(shí)例(2)
- c++網(wǎng)絡(luò)編程下Linux的epoll技術(shù)和Windows下的IOCP模型
- C++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能
- C++中Socket網(wǎng)絡(luò)編程實(shí)例詳解
- C++ 網(wǎng)絡(luò)編程 總結(jié)
- C++網(wǎng)絡(luò)編程詳細(xì)講解
相關(guān)文章
C++實(shí)現(xiàn)簡(jiǎn)單插件機(jī)制原理解析
這篇文章主要介紹了C++實(shí)現(xiàn)簡(jiǎn)單插件機(jī)制原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02C++實(shí)現(xiàn)LeetCode(210.課程清單之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(210.課程清單之二),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08C++?重載運(yùn)算符在HotSpot?VM中的應(yīng)用小結(jié)
C++支持運(yùn)算符重載,對(duì)于Java開發(fā)者來說,這個(gè)可能比較陌生一些,因?yàn)镴ava不支持運(yùn)算符重載,下面介紹一下HotSpot?VM中的運(yùn)算符重載,感興趣的朋友跟隨小編一起看看吧2023-09-09C語(yǔ)言 深入解讀數(shù)據(jù)結(jié)構(gòu)之堆的實(shí)現(xiàn)
堆就是用數(shù)組實(shí)現(xiàn)的二叉樹,所以它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點(diǎn)的位置2021-11-11