对TCP/IP协议的理解

一、如何创建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", "连接已关闭");
}
相关推荐
疯狂吧小飞牛6 小时前
GPG基础指令
linux·服务器·网络
小饕6 小时前
苏格拉底式提问对抗315 AI投毒:实操指南
网络·人工智能
斯安7 小时前
车载总线与网络总结
网络
czxyvX7 小时前
009-数据链路层
网络
源远流长jerry7 小时前
RDMA 基本操作类型详解:从双端通信到单端直访
linux·网络·tcp/ip·ip
森林猿7 小时前
java-modbus-读取-modbus4j
java·网络·python
csdn_aspnet7 小时前
AD域网络位置异常深度排错指南:从DNS到GPO的完整诊断链
网络·ad·dns··netlogon
Simon_lca8 小时前
突破合规瓶颈:ZDHC Supplier to Zero(工厂零排放 - 进阶型)体系全攻略
大数据·网络·人工智能·分类·数据挖掘·数据分析·零售
黄焖鸡能干四碗9 小时前
网络安全建设实施方案(Word文件参考下载)
大数据·网络·人工智能·安全·web安全·制造
天赐学c语言10 小时前
Linux - 应用层自定义协议与序列/反序列化
linux·服务器·网络·c++