当前位置: 首页 > news >正文

【Linux网络】Socket-TCP相关函数

创建套接字socket()

#include <sys/socket.h>int socket(int domain, int type, int protocol);
  • 参数
    • domain:指定协议族,如AF_INET(IPv4)、AF_INET6(IPv6)。
    • type:指定套接字类型,SOCK_STREAM表示面向连接的字节流套接字(TCP)。
    • protocol:通常设为0,由系统根据domaintype选择默认协议。
  • 返回值:成功时返回一个非负整数描述符,失败时返回 -1。

绑定地址bind()

#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 参数
    • sockfd:由socket()函数返回的套接字描述符。
    • addr:指向包含服务器地址和端口信息的结构体指针,对于IPv4是struct sockaddr_in,对于IPv6是struct sockaddr_in6
    • addrlen:地址结构体的长度。
  • 返回值:成功返回0,失败返回 -1。

监听连接listen()

#include <sys/socket.h>int listen(int sockfd, int backlog);
  • 参数
    • sockfd:要监听的套接字描述符。
    • backlog:指定等待连接队列的最大长度。
  • 返回值:成功返回0,失败返回 -1。

接受连接accept()

#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  • 参数
    • sockfd:处于监听状态的套接字描述符。
    • addr:用于存储客户端地址信息的结构体指针。
    • addrlen:是一个指向addr结构体长度的指针,传入时需初始化为addr结构体的大小,函数返回时会更新为实际存储的客户端地址长度。
  • 返回值:成功返回一个新的套接字描述符,用于与客户端通信,失败返回 -1。

连接服务器connect()

#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 参数
    • sockfd:客户端套接字描述符。
    • addr:服务器的地址结构体指针。
    • addrlen:服务器地址结构体的长度。
  • 返回值:成功返回0,失败返回 -1。

发送数据send()

#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 参数
    • sockfd:要发送数据的套接字描述符。
    • buf:指向要发送数据的缓冲区指针。
    • len:要发送数据的长度。
    • flags:通常设为0,用于指定一些发送选项。
  • 返回值:成功返回实际发送的字节数,失败返回 -1。

接收数据recv()

#include <sys/socket.h>ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • 参数
    • sockfd:接收数据的套接字描述符。
    • buf:用于存储接收数据的缓冲区指针。
    • len:缓冲区的长度。
    • flags:通常设为0,用于指定一些接收选项。
  • 返回值:成功返回实际接收的字节数,连接关闭时返回0,失败返回 -1。

关闭套接字close()

#include <unistd.h>int close(int fd);
  • 参数fd是要关闭的套接字描述符。
  • 返回值:成功返回0,失败返回 -1。

这些函数是C++ 中实现Socket - TCP编程的基础,通过组合使用它们,可以创建可靠的网络应用程序,实现客户端与服务器之间的通信。

http://www.xdnf.cn/news/363457.html

相关文章:

  • 大模型提示词策略
  • 赋能智能交通:时空图卷积网络引领速度预测新变革
  • PostgreSQL技术大讲堂 - 第89讲:重讲数据库完全恢复
  • 图解gpt之Seq2Seq架构与序列到序列模型
  • 【某OTA网站】phantom-token 1004
  • vue 监听元素大小变化 element-resize-detector
  • 《Vuejs与实现》第 6 章(原始值响应式方案)
  • 蓝桥杯青少 图形化编程(Scratch)编程题每日一练——图形特效
  • 嵌套路由~
  • leetcode - 双指针问题
  • Linux C语言线程编程入门笔记
  • uni-app 中的条件编译与跨端兼容
  • 区块链详解
  • 独立自主的网络浏览器——Ladybird
  • 类加载器, JVM类加载机制
  • 【PostgreSQL 中插入数据时跳过已存在记录的方法】
  • 阿里云服务器数据库故障排查指南?
  • springboot 加载 tomcat 源码追踪
  • Web端项目系统访问页面很慢,后台数据返回很快,网络也没问题,是什么导致的呢?
  • NVME / DoCA 是什么?
  • 开源数字人框架 AWESOME-DIGITAL-HUMAN 技术解析与应用指南
  • 【Ansible】模块详解
  • 切比雪夫不等式专题习题解析
  • 国联股份卫多多与北京经纬智诚签署战略合作协议
  • 使用Python和TensorFlow实现图像分类的人工智能应用
  • 计算人声录音后电平的大小(dB SPL->dBFS)
  • Leetcode刷题 由浅入深之字符串——541. 反转字符串Ⅱ
  • Spring中除DI之外获取 BEAN 的方式​
  • 数据结构每日一题day18(链表)★★★★★
  • 在自然语言处理任务中,像 BERT 这样的模型会在输入前自动加上一些特殊token