C++ 实现简单Tcp客户端

使用C++基于windows平台下实现Tcp客户端请求

main.cpp


#include 
#include 
#include 

using namespace std;

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

int main() {
	//初始化winsock2.2相关的动态库
	WSADATA wd; //获取socket相关信息
	if(0 != WSAStartup(MAKEWORD(2, 2), &wd)) { //0 表示成功
		cout << "WSAStartup error: " << WSAGetLastError() << endl;
		return 0;
	}

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

	//2. 连接服务器
	sockaddr_in addr;//不建议使用sockaddr 建议使用sockaddr_in
	addr.sin_family = AF_INET; //地址族
	addr.sin_port = htons(8888); //网络字节序
	//addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//网络字节序  inet_addr只能为ipv4转换 属于低版本 不建议用
	inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);//ip地址转网络字节序
	int len = sizeof(sockaddr_in);

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

	//3. 接受发送消息
	int ret = 0;
	do {
		//接受客户端的消息
		char buf[64] = {'\0'};
		char *address = new char;
		ret = recv(s, buf, 64, 0);//把flag置 0
		//cout << "recv" << inet_ntoa(addr.sin_addr) << ":   "<< buf << endl; //inet_ntoa 转换为IP字符串 inet_ntoa只能为ipv4转换 属于低版本 不建议用
		cout << "recv : " << inet_ntop(AF_INET, (void*)&addr.sin_addr, address, sizeof(SOCKADDR_IN)) << ":   " << buf << endl; //inet_ntoa 转换为IP字符串
		//发送
		char str[20] = "I am Client!";
		ret = send(s, str, strlen(str), 0);

		Sleep(1000); // 1s发送一次
	} while(ret != SOCKET_ERROR && ret != 0);


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

	//清理winsock 环境
	WSACleanup();


	return 0;
}


你可能感兴趣的:(#,2.6,网络编程)