詳談C++ socket網(wǎng)絡(luò)編程實(shí)例
更新時(shí)間:2021年11月19日 10:11:45 作者:ufgnix0802
這篇文章主要為大家介紹了C++ socket網(wǎng)絡(luò)編程實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
功能
實(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ù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析的相關(guān)資料,需要的朋友可以參考下2017-03-03
Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼
本篇文章主要介紹了Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07

