Windows TCP Socket 通訊實例 (C++)

C++ TCP Socket通訊實例代碼

服務端

步驟:

1.加載套接字庫c++

2.建立套接字服務器

3.鏈接套接字網絡

4.設置可監聽的客戶端的最大數量socket

5.發送數據給客戶端函數

6.接收客戶端傳來的數據ui

7.關閉鏈接spa

服務端示例代碼:
// TCPServer.cpp : 定義控制檯應用程序的入口點。
// TCP通訊服務器端代碼

#include "stdafx.h"

using namespace std;

bool SetTcpServer() {
	//1.加載套接字庫
	WORD w_version_req = MAKEWORD(2,2); //初始化WinSock版本號
	WSADATA wsaData;
	int flag_InitWSA = WSAStartup(w_version_req,&wsaData); //具體參數含義參考:https://blog.csdn.net/clemontine/article/details/53141041
	//flag_InitWSA 不爲0則說明初始化失敗
	if (flag_InitWSA != 0)
	{
		cout << "初始化WSAStartup失敗!"<<endl;
		return false;
	}
	//wsaData爲空指針,說明初始化失敗
	if (&wsaData == nullptr)
	{
		cout << "初始化失敗,&wsaData爲空指針!" << endl;
		return false;
	}

	//2.建立套接字
	SOCKET socketServer = socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN socketAddr;
	socketAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //須要接收任意的IP地址
	socketAddr.sin_family = AF_INET;
	socketAddr.sin_port = htons(6000);//端口號

	//3.鏈接套接字
	bind(socketServer,(SOCKADDR*)&socketAddr,sizeof(SOCKADDR));
	
	//4.設置監聽客戶端數量
	listen(socketServer,5);
	cout << "啓動監聽" << endl;

	SOCKADDR_IN sockclient;
	int len=sizeof(SOCKADDR);
	SOCKET sockCon=accept(socketServer,(SOCKADDR*)&sockclient,&len);//建立連接套接字

	//5.發送數據到客戶端
	const char* sendBuf = "hey,在嗎?";
	send(sockCon,sendBuf,strlen(sendBuf)+1,0);
	
	//6.接收客戶端發來的消息
	char recvBuf[250];
	recv(sockCon,recvBuf,250,0);//發送\接收函數
	cout <<"收到的客戶端發來的信息爲:" << recvBuf << endl;	
	
	//7.關閉服務器
	closesocket(sockCon);//關閉套接字
	WSACleanup();
	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
	SetTcpServer();
	cout << "服務器關閉!" << endl;
	int mm ; 
	cin >> mm;

	return 0;
}


複製代碼

客戶端

步驟:

1.加載套接字庫.net

2.建立套接字指針

3.鏈接套接字code

4.發送數據到服務器

5.關閉套接字

客戶端示例代碼:
// TCPClient.cpp : 定義控制檯應用程序的入口點。
// TCP網絡通訊客戶端代碼

#include "stdafx.h"

using namespace std;

bool SetTcpClient() {
	//1.加載套接字庫
	WORD w_version_req = MAKEWORD(2,2); //初始化WinSock版本號
	WSADATA wsaData;
	int flag_InitWSA = WSAStartup(w_version_req,&wsaData); //具體參數含義參考:https://blog.csdn.net/clemontine/article/details/53141041
	//flag_InitWSA 不爲0則說明初始化失敗
	if (flag_InitWSA != 0)
	{
		cout << "初始化WSAStartup失敗!"<<endl;
		return false;
	}
	//wsaData爲空指針,說明初始化失敗
	if (&wsaData == nullptr)
	{
		cout << "初始化失敗,&wsaData爲空指針!" << endl;
		return false;
	}

	//2.建立套接字
	SOCKET socketClient = socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN socketAddr;
	socketAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //須要接收的IP地址
	socketAddr.sin_family = AF_INET;
	socketAddr.sin_port = htons(6000);//端口號

	//3.鏈接套接字
	connect(socketClient,(SOCKADDR*)&socketAddr,sizeof(SOCKADDR));

	//4.發送數據到服務器
	char receiveBuf[250];
	recv(socketClient,receiveBuf,250,0);//接收服務器的消息
	cout <<"服務端發來消息:" <<receiveBuf << endl;
	const char* sendBuf = "我今天還能夠,天氣不錯!";
	send(socketClient,sendBuf,strlen(sendBuf)+1,0); //+1是由於要包含\n字符 發送給服務器消息

	//5.關閉套接字
	closesocket(socketClient);
	WSACleanup();

	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
	//啓動客戶端
	SetTcpClient();
	cout << "客戶端關閉" << endl;
	int msg_stop;
	cin >> msg_stop;
	return 0;
}


複製代碼

啓動客戶端和服務器

運行結果:

說明TCP 通訊成功!

相關文章
相關標籤/搜索