Windows TCP Socket 通信实例 (C++)

4,392 阅读3分钟

C++ TCP Socket通信实例代码

服务端

步骤:

1.加载套接字库

2.创建套接字

3.连接套接字

4.设置可监听的客户端的最大数量

5.发送数据给客户端

6.接收客户端传来的数据

7.关闭连接

服务端示例代码:
// 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.加载套接字库

2.创建套接字

3.连接套接字

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 通信成功!