詳談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ò)庫
//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ò)庫
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)簡單聊天室功能
- C++中Socket網(wǎng)絡(luò)編程實(shí)例詳解
- C++ 網(wǎng)絡(luò)編程 總結(jié)
- C++網(wǎng)絡(luò)編程詳細(xì)講解
相關(guān)文章
C++實(shí)現(xiàn)簡單插件機(jī)制原理解析
這篇文章主要介紹了C++實(shí)現(xiàn)簡單插件機(jī)制原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
C++實(shí)現(xiàn)LeetCode(210.課程清單之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(210.課程清單之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C++?重載運(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-09
C語言 深入解讀數(shù)據(jù)結(jié)構(gòu)之堆的實(shí)現(xiàn)
堆就是用數(shù)組實(shí)現(xiàn)的二叉樹,所以它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點(diǎn)的位置2021-11-11

