TCP client 代码

本代码为tcp客户端C++代码,代码功能是向服务器端发送"help me"字符串,如果服务器端有相应,就会向客户端回复一段字符串。因为客户端和服务器的程序都运行在本机上,因此,服务器的IP设置为本机IP即127.0.0.1,服务器的端口为9555。下面是客户端程序的代码。

/*client*/

#include <stdio.h>
#include <WinSock2.h>
#include <WS2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int InitWinSocket()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1, 1);//第一个参数为低位字节;第二个参数为高位字节

	err = WSAStartup(wVersionRequested, &wsaData);//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源
	if (err != 0)
	{
		return -1;
	}

	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容
	{
		WSACleanup();
		return -1;
	}

	return 0;
}

int main()
{
	/*初始化 Windows Socket*/
	/*这部分不知道要不要加,不加也能运行,估计是我的电脑开机时已经对其进行了初始化*/
	if (InitWinSocket() != 0)
	{
		printf("Init Windows Sock Failed!\n");
		return -1;
	}

	printf("Client:\n");
	
	SOCKET sock;
	sockaddr_in server;

	/*创建socket*/
	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (sock < 0)
	{
		printf("create socket failed!\n");
		return -1;
	}

    /*对socket进行一些设置,这里是端口复用设置*/
	int opt = 1;
	socklen_t optlen = sizeof(opt);
	if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, optlen) < 0)
	{
		printf("set sock opt failed!\n");
		return -1;
	}
    
	/*设置服务器ip和端口*/
	server.sin_family = AF_INET;
	server.sin_port = htons(9555);
	server.sin_addr.s_addr = inet_addr("127.0.0.1");

	/*连接到服务器*/
	if (connect(sock, (sockaddr*)&server, sizeof(sockaddr)) < 0)
	{
		printf("connect to server failed!\n");
		return -1;
	}

	/*发送请求*/
	char buf[1024];
	strcpy_s(buf, "help me");
	int len = strlen(buf);
	send(sock, buf, len, 0);

	/*收到回复*/
	memset(buf, 0, sizeof(buf));
	len = recv(sock, buf, sizeof(buf), 0);
	if (len > 0)
	{
		printf("recv = %s\n", buf);
	}

	closesocket(sock);
	WSACleanup();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是 ESP8266 连接 TCP 客户端的示例代码: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; // 输入你的 WiFi 名称 const char* password = "your_PASSWORD"; // 输入你的 WiFi 密码 const char* host = "example.com"; // 输入你要连接的 TCP 服务器的域名或 IP 地址 const uint16_t port = 80; // 输入你要连接的 TCP 服务器的端口号 void setup() { Serial.begin(115200); delay(10); // 连接 WiFi Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { // 连接 TCP 服务器 Serial.print("Connecting to "); Serial.println(host); WiFiClient client; if (!client.connect(host, port)) { Serial.println("TCP connection failed"); return; } // 向 TCP 服务器发送数据 Serial.println("Sending data to TCP server"); client.print("GET / HTTP/1.1\r\n"); client.print("Host: "); client.print(host); client.print("\r\n"); client.print("Connection: close\r\n"); client.print("\r\n"); // 读取 TCP 服务器返回的数据 Serial.println("Reading data from TCP server"); while (client.connected() && !client.available()) delay(1); while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } // 断开 TCP 连接 Serial.println(); Serial.println("Closing TCP connection"); client.stop(); // 等待一段时间后再次连接 TCP 服务器 delay(5000); } ``` 请将 `your_SSID` 和 `your_PASSWORD` 替换为你的 WiFi 名称和密码,将 `example.com` 替换为你要连接的 TCP 服务器的域名或 IP 地址,将 `80` 替换为你要连接的 TCP 服务器的端口号。在 Arduino IDE 中上传代码到 ESP8266 开发板后,打开串口监视器,你将看到 ESP8266 连接 WiFi 和 TCP 服务器的过程,并且输出 TCP 服务器返回的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值