c++ socket编程之TCP客户端

1. 新建TCP客户端项目

image-20210410214325351

image-20210410214339740

image-20210410214703748

2. 编写TCP_Client代码

#include <WinSock2.h> // winsock的头文件
#include <iostream>
using namespace std;

// 指定动态库lib文件
#pragma comment(lib,"ws2_32.lib")

// TCP客户端
int main()
{
	// 初始化winsock2.2相关的动态库
	WSADATA wd;
	if(WSAStartup(MAKEWORD(2,2), &wd) != 0) // 0表示成功
	{
		cout << "WSAStartup Error:" << WSAGetLastError() << endl;
		return 0;
	}

	// 1.创建TCP socket,流式套接字
	SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET)
	{
		cout << "socket Error:" << WSAGetLastError() << endl;
		return 0;
	}

	// 2. 链接服务端
	sockaddr_in addr; // 不建议使用sockaddr,建议用sockaddr_in
	addr.sin_port = htons(8000); // 网络字节序
	addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); // 网络字节序
	addr.sin_family = AF_INET; // 地址族
	int len = sizeof(sockaddr_in);

	if(connect(s, (sockaddr*)&addr, len) == SOCKET_ERROR)
	{
		cout << "connect error:" << WSAGetLastError() << endl;
		return 0;
	}

	// 3.接收发送消息
	int ret=0;
	do{
		// 接收服务端的消息
		char buf[64] = {'\0'};
		ret = recv(s, buf, 64, 0); // 把flag置0
		// inet_ntoa转换为IP字符串
		cout << "recv" << inet_ntoa(addr.sin_addr) << ": " << buf << endl;

		// 发送
		ret = send(s, "I am Client!", strlen("I am Client!"), 0);

		Sleep(1000);
	}while(ret != SOCKET_ERROR && ret!= 0);
	

	// 4.关闭套接字
	closesocket(s);


	// 清理winsock环境
	WSACleanup();


	return 0;
}

3. 先启动服务端

服务端正在等待客户端连接

image-20210411080443790

4. 再启动客户端

连接成功,互相通信

image-20210411080534819

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值