最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳談C++ socket網(wǎng)絡(luò)編程實(shí)例

 更新時(shí)間:2021年11月19日 10:11:45   作者:ufgnix0802  
這篇文章主要為大家介紹了C++ socket網(wǎng)絡(luò)編程實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

功能

實(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)聽(tīng),提示本機(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é)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

最新評(píng)論

苏尼特左旗| 海晏县| 商洛市| 微山县| 辽源市| 松阳县| 临城县| 凤山县| 台南市| 信阳市| 普陀区| 东城区| 思南县| 酒泉市| 顺平县| 盘山县| 六安市| 马关县| 莱西市| 济宁市| 凭祥市| 大足县| 囊谦县| 陇西县| 宾川县| 清丰县| 洪江市| 清苑县| 大悟县| 太保市| 台东县| 绥阳县| 兴文县| 澄江县| 桐乡市| 温州市| 夏河县| 合山市| 龙州县| 保亭| 恩平市|