一、如何创建sockt
这是基于Linux的开发环境

SOCK_STREAM是指tcp;SOCK_DGRAM是指udp
因为int socket会返回一个int,也称它为描述字;
当你要发送数据给对方的时候不止要对方的端口号(sin_port),还要知道对方的地址(sin_addr)

#include <stdio.h>
#include <string.h>
#include <sys/param.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include "esp_log.h"
// 引入 lwIP 协议栈的 socket 头文件(ESP-IDF 基于 lwIP 实现网络)
#include "lwip/sockets.h"
#include "lwip/netdb.h"
#include "lwip/dns.h"
#define SERVER_IP "192.140.4.2"
#define SERVER_PORT 8080
int main()
{
//1、创建socket;
ESP_LOGI("TCP","开始显示TCP客户端");
int sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
ESP_LOGE("TCP", "创建Socket失败");
return -1;
}
ESP_LOGI("TCP", "Socket创建成功");
//2、创建服务器地址
struct sockaddr_in server_addr = {
.sin_family = AF_INET,
.sin_port = htons(SERVER_PORT),
};
int ret = inet_pton(AF_INET, SERVER_IP,&server_addr.sin_addr);
if(ret == 1)
{
ESP_LOGI("inet","转换成功");
}
else
{
ESP_LOGE("inet","转换失败");
}
//3.链接服务器
if(connect(sock,(struct sockaddr *)&server_addr, sizeof(server_addr)) != 0)
{
ESP_LOGE("TCP", "连接服务器失败");
close(sock);
return -2;
}
ESP_LOGI("TCP", "已连接服务器%s:%d", SERVER_IP,SERVER_PORT );
//4、发送消息
const char *message = "你好,我是ESP32-S3!";
if(send(sock, message, sizeof(message),0) < 0)
{
ESP_LOGE("TCP", "发送消息失败");
}
else
{
ESP_LOGI("TCP", "已发送:%s",message);
}
//5接受服务器的回复
char buffer[128];
int len = recv(sock, buffer, sizeof(buffer) - 1, 0);
if(len > 0)
{
buffer[len] = '\0';
ESP_LOGI("TCP", "收到回复:%s",buffer);
}
else
{
ESP_LOGE("TCP", "接收消息失败");
}
close(sock);
ESP_LOGI("TCP", "连接已关闭");
}