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

相关文章
相关标签/搜索