衡阳做网站/网络推广公司官网

衡阳做网站,网络推广公司官网,快速做网站公司哪家好,合肥网站建设公司 推荐在C语言中&#xff0c;套接字&#xff08;Socket&#xff09;编程主要用于网络通信&#xff0c;尤其是在基于TCP/IP协议的应用程序开发中。常用的套接字编程API主要基于Berkeley Sockets&#xff08;伯克利套接字&#xff09;接口&#xff0c;这些函数通常在<sys/socket.h&g…

在C语言中,套接字(Socket)编程主要用于网络通信,尤其是在基于TCP/IP协议的应用程序开发中。常用的套接字编程API主要基于Berkeley Sockets(伯克利套接字)接口,这些函数通常在<sys/socket.h><netinet/in.h>头文件中定义。以下是对常见套接字API的详细讲解,包括函数功能、参数、返回值、涉及的结构体及其成员的含义。


1. socket()

功能

创建新的套接字。

函数原型
int socket(int domain, int type, int protocol);
参数
  • domain: 指定通信协议族(协议域)。
    • 类型: int
    • 常见值:
      • AF_INET(IPv4协议)
      • AF_INET6(IPv6协议)
      • AF_UNIX(本地通信)
    • 含义: 定义套接字的地址格式和通信范围。
  • type: 指定套接字类型。
    • 类型: int
    • 常见值:
      • SOCK_STREAM(面向连接的TCP流)
      • SOCK_DGRAM(无连接的UDP数据报)
      • SOCK_RAW(原始套接字)
    • 含义: 定义通信的语义。
  • protocol: 指定具体协议。
    • 类型: int
    • 常见值:
      • 通常为0(表示由domaintype自动选择默认协议,如TCP或UDP)
      • 特殊值(如IPPROTO_TCPIPPROTO_UDP)用于显式指定协议。
    • 含义: 细化协议选择。
返回值
  • 类型: int
  • 含义:
    • 成功: 返回套接字文件描述符(非负整数)。
    • 失败: 返回-1,并设置errno表示错误。
相关结构体

无直接结构体参数。


2. bind()

功能

将套接字绑定到特定的地址和端口。

函数原型
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数
  • sockfd: 要绑定的套接字文件描述符。
    • 类型: int
    • 含义: 由socket()创建的套接字。
  • addr: 指向地址结构体的指针。
    • 类型: const struct sockaddr *
    • 含义: 指定绑定的地址和端口。
  • addrlen: 地址结构体的大小。
    • 类型: socklen_t(通常是unsigned int
    • 含义: addr指向的结构体长度。
返回值
  • 类型: int
  • 含义:
    • 成功: 返回0
    • 失败: 返回-1,并设置errno
相关结构体
  • struct sockaddr
    • 定义:
      struct sockaddr {sa_family_t sa_family;    // 地址族char        sa_data[14];  // 地址数据(具体含义依赖地址族)
      };
      
    • 成员:
      • sa_family: 地址族(如AF_INET)。
        • 类型: sa_family_t(通常是unsigned short
        • 含义: 指定地址类型。
      • sa_data: 地址数据的字节数组。
        • 类型: char[14]
        • 含义: 存储具体地址信息,但通常不直接使用。
  • 实际常用: struct sockaddr_in(针对IPv4)
    • 定义:
      struct sockaddr_in {sa_family_t    sin_family; // 地址族in_port_t      sin_port;   // 端口号struct in_addr sin_addr;   // IP地址unsigned char  sin_zero[8]; // 填充字节
      };
      
    • 成员:
      • sin_family: 地址族。
        • 类型: sa_family_t
        • 含义: 通常为AF_INET
      • sin_port: 端口号。
        • 类型: in_port_t(通常是uint16_t
        • 含义: 网络字节序的端口号(如htons(8080))。
      • sin_addr: IP地址。
        • 类型: struct in_addr
        • 定义:
          struct in_addr {in_addr_t s_addr; // IPv4地址(32位)
          };
          
        • 成员:
          • s_addr: IPv4地址。
            • 类型: in_addr_t(通常是uint32_t
            • 含义: 网络字节序的IP地址(如inet_addr("127.0.0.1"))。
      • sin_zero: 填充字节。
        • 类型: unsigned char[8]
        • 含义: 用于对齐,通常置为0

3. listen()

功能

将套接字设置为监听状态,用于接受客户端连接(仅限TCP)。

函数原型
int listen(int sockfd, int backlog);
参数
  • sockfd: 要监听的套接字文件描述符。
    • 类型: int
    • 含义: 已绑定的服务器套接字。
  • backlog: 等待连接队列的最大长度。
    • 类型: int
    • 含义: 指定未完成连接的最大排队数(如510)。
返回值
  • 类型: int
  • 含义:
    • 成功: 返回0
    • 失败: 返回-1,并设置errno
相关结构体

无直接结构体参数。


4. accept()

功能

接受客户端连接请求,返回新的套接字用于通信(仅限TCP)。

函数原型
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数
  • sockfd: 监听的套接字文件描述符。
    • 类型: int
    • 含义: 已调用listen()的服务器套接字。
  • addr: 客户端地址信息。
    • 类型: struct sockaddr *
    • 含义: 用于存储连接的客户端地址(通常转换为struct sockaddr_in)。
  • addrlen: 地址结构体的长度。
    • 类型: socklen_t *
    • 含义: 传入时为addr的大小,函数返回时为实际地址长度。
返回值
  • 类型: int
  • 含义:
    • 成功: 返回新的套接字文件描述符,用于与客户端通信。
    • 失败: 返回-1,并设置errno
相关结构体
  • bind()中的struct sockaddrstruct sockaddr_in

5. connect()

功能

发起与服务器的连接(用于客户端)。

函数原型
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数
  • sockfd: 客户端套接字文件描述符。
    • 类型: int
    • 含义: 由socket()创建的套接字。
  • addr: 目标服务器地址。
    • 类型: const struct sockaddr *
    • 含义: 指定服务器的地址和端口。
  • addrlen: 地址结构体的长度。
    • 类型: socklen_t
    • 含义: addr的大小。
返回值
  • 类型: int
  • 含义:
    • 成功: 返回0
    • 失败: 返回-1,并设置errno
相关结构体
  • bind()中的struct sockaddrstruct sockaddr_in

6. send()recv()

功能
  • send(): 发送数据。
  • recv(): 接收数据。
函数原型
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
参数
  • sockfd: 套接字文件描述符。
    • 类型: int
    • 含义: 已连接的套接字。
  • buf: 数据缓冲区。
    • 类型: const void *send)或void *recv
    • 含义: 发送或接收的数据存储位置。
  • len: 数据长度。
    • 类型: size_t
    • 含义: 要发送或接收的字节数。
  • flags: 操作标志。
    • 类型: int
    • 常见值:
      • 0(默认行为)
      • MSG_DONTWAIT(非阻塞)
    • 含义: 修改发送/接收行为。
返回值
  • 类型: ssize_t
  • 含义:
    • 成功: 返回实际发送/接收的字节数。
    • 失败: 返回-1,并设置errno
相关结构体

无直接结构体参数。


7. close()

功能

关闭套接字。

函数原型
int close(int sockfd);
参数
  • sockfd: 要关闭的套接字文件描述符。
    • 类型: int
    • 含义: 由socket()accept()返回的描述符。
返回值
  • 类型: int
  • 含义:
    • 成功: 返回0
    • 失败: 返回-1,并设置errno
相关结构体

无直接结构体参数。


总结

以下是常用套接字API的快速参考表:

函数功能返回值类型主要结构体
socket()创建套接字int
bind()绑定地址intsockaddr, sockaddr_in
listen()开始监听int
accept()接受连接intsockaddr, sockaddr_in
connect()发起连接intsockaddr, sockaddr_in
send()发送数据ssize_t
recv()接收数据ssize_t
close()关闭套接字int

这些API是C语言网络编程的核心,配合结构体(如struct sockaddr_in)使用,可以实现基本的客户端-服务器通信。需要注意网络字节序(htons, ntohs, htonl, ntohl)和错误处理(errno)的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux和gcc/g++常用命令总结

目录 Linux命令总结 文件操作相关命令 ls cd pwd cp mv rm cat mkdir rmdir touch 文本处理操作命令 grep awk sed 进程管理操作相关命令 ps top htop kill pkill killall chmod chown 网络操作相关命令 ping ifconfig netstat ss lsof curl …

VUE的第二天

1. 指令修饰符 1.1什么是指令修饰符&#xff1f; ​ 所谓指令修饰符就是通过“.”指明一些指令后缀 不同的后缀封装了不同的处理操作 —> 简化代码 1.2按键修饰符 keyup.enter —>当点击enter键的时候才触发 代码演示&#xff1a; <div id"app"><…

WSL with NVIDIA Container Toolkit

一、wsl 下安装 docker 会提示安装 docekr 桌面版&#xff0c;所以直接安装 docker 桌面版本即可 二、安装 NVIDIA Container Toolkit NVIDIA Container Toolkit仓库 https://github.com/NVIDIA/nvidia-container-toolkit​github.com/NVIDIA/nvidia-container-toolkit 安装…

mysql下载

目录 下载地址&#xff1a; 1.MSI安装包下载 2.ZIP压缩包下载 卸载MySQL&#xff1a; 下载地址&#xff1a; MySQL :: Download MySQL Community Server到mysql官网进行下载&#xff1a;MySQL :: Download MySQL Community Server &#xff08;下面二选一&#xff0c;选择一…

Lab17_ Blind SQL injection with out-of-band data exfiltration

文章目录 前言&#xff1a;进入实验室构造 payload 前言&#xff1a; 实验室标题为&#xff1a; 带外数据泄露的 SQL 盲注 简介&#xff1a; 本实验包含一个SQL盲目注入漏洞。应用程序使用跟踪Cookie进行分析&#xff0c;并执行包含提交的Cookie值的SQL查询。 SQL查询是异…

C/C++蓝桥杯算法真题打卡(Day4)

一、P11041 [蓝桥杯 2024 省 Java B] 报数游戏 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;// 计算第 n 个满足条件的数 long long findNthNumber(long long n) {long long low 1, high 1e18; // 二分查找范围while (low < high) {lo…

【Python 数据结构 10.二叉树】

目录 一、二叉树的基本概念 1.二叉树的定义 2.二叉树的特点 3.特殊的二叉树 Ⅰ、斜树 Ⅱ、满二叉树 Ⅲ、完全二叉树 Ⅳ、完全二叉树和满二叉树的区别 4.二叉树的性质 5.二叉树的顺序存储 Ⅰ、完全二叉树 Ⅱ、非完全二叉树 Ⅲ、稀疏二叉树 6.二叉树的链式存储 7.二叉树的遍历概念…

Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术

文章目录 前言一、Docker 简介二、Docker Desktop 安装2.1 系统要求2.2 安装步骤 三、Docker 基本概念四、Docker 常用命令五、实战&#xff1a;运行你的第一个容器5.1 拉取并运行 Nginx 容器5.2 查看容器日志5.3 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…

可变参数与递归

可变参数与递归 可变参数 package method; ​ public class Demo03 {public static void main(String[] args) {Demo03 demo03new Demo03();demo03.test(1,2,3);​}public void test (int... i){System.out.println(i[0]);//1System.out.println(i[1]);//2System.out.println(…

【redis】全局命令exists、del、expire、ttl(惰性删除和定期删除)

exists——判定 key 是否存在 语法&#xff1a; exists key [key...] # 返回值&#xff1a;key 存在的个数针对多个 key 来说&#xff0c;是非常有用的时间复杂度 O ( 1 ) O(1) O(1) Redis 组织这些 key 就是按照哈希表的方式来组织的。Redis 支持很多数据结构指的是 value …

系统架构设计师—系统架构设计篇—特定领域软件体系结构

文章目录 概述领域分类垂直域水平域 系统模型基本活动参与角色 概述 特定领域软件架构&#xff08;Domain Specific Software Architecture&#xff0c;DSSA&#xff09;是在一个特定应用领域中&#xff0c;为一组应用提供组织结构参考的标准团建体系结构。 领域分类 垂直域…

OpenManus:优点突出,短板也明显

最近&#xff0c;OpenManus 在 AI 领域掀起了一阵热潮。作为开源版的智能代理软件&#xff0c;它自诞生起就备受瞩目。今天&#xff0c;咱们就来深入聊聊 OpenManus 在实际测试中的表现&#xff0c;看看它到底有哪些过人之处&#xff0c;又存在哪些不足。​ 优点大起底​ 开源…

P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS

P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿&#xff0c;判断每一块陆地是否会沉没。对于这种图的遍历&#xff0c;我们首先应该想到DFS。 代码的注意思想就是&#xff0c;在主函数中遍历找出所有岛屿&#xff0c…

AI多模态教程:DeepSeek多模态模型解析及实践指南

AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台&#xff0c;涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等…

【银河麒麟高级服务器操作系统实例】虚拟机桥接网络问题分析及处理

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…

使用腾讯ncnn加速推理yolo v9对比opencv dnn

前面博客 【opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9 介】 绍了 yolov9 详细使用方式&#xff0c;重参数化、导出端到端模型&#xff0c;使用 torch、opencv、tensorrt 以及 paddle 的测试。 由于存在移动端推理部署的需求&#xff0c;需要进行加速处理&…

C语言学习笔记-进阶(7)字符串函数3

1. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. &#xff08;函数返回字符串str2在字符串str1中第⼀次出现的位置&#x…

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中&#xff0c;动画是提升用户体验的关键要素。通过巧妙运用动画&#xff0c;我们能让应用界面更加生动、交互更加流畅&#xff0c;从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…

Nginx(基础安装+配置文件)

目录 一.Nginx基础 1.基础知识点 2.异步非阻塞机制 二.Nginx安装 2.1安装nginx3种方式 1.包管理工具安装&#xff08;yum/apt&#xff09; 2.本地包安装&#xff08;rpm/dpkg&#xff09; 3.源码编译安装 3.1 源码编译安装nginx流程&#xff08;ubuntu&#xff09; 1.…

修改jupyter notebook的工作空间

今天&#xff0c;我之前R配置jupyter工作空间&#xff0c;讲了各种语言内核分配不同的工作空间&#xff0c;虽然是方便管理&#xff0c;但有个问题就是需要每次都进入C盘的配置文件找到notebook的工作空间设置路径打开修改嘛。 因此&#xff0c;今天我编写了一个python脚本&am…