socket套接字函数

Socket套接字函数是用于网络编程的一组API,用于在网络上进行通信。这些函数提供了一种通用的接口,使得程序能够通过网络连接进行数据的发送和接收。下面是对常见的几个Socket函数及其参数的解释:

  1. socket()函数

    • 作用:创建一个套接字。
    • 参数:
      • domain:指定套接字的协议族,常见的有AF_INET(IPv4)和AF_INET6(IPv6)。
      • type:指定套接字的类型,常见的有SOCK_STREAM(流套接字,用于TCP)和SOCK_DGRAM(数据报套接字,用于UDP)。
      • protocol:指定使用的协议,通常传入0表示自动选择合适的协议。
  2. bind()函数

    • 作用:将套接字与特定的IP地址和端口绑定。
    • 参数:
      • sockfd:指定要绑定的套接字。
      • addr:指定要绑定的地址信息,通常是一个包含IP地址和端口号的结构体。
  3. listen()函数

    • 作用:将套接字设为监听状态,开始接受连接请求。
    • 参数:
      • sockfd:指定要监听的套接字。
      • backlog:指定连接队列的最大长度。
  4. accept()函数

    • 作用:接受客户端的连接请求。
    • 参数:
      • sockfd:指定被监听的套接字。
      • addr:(可选)用于存储客户端地址信息的结构体。
      • addrlen:(可选)指定addr结构体的大小。
  5. connect()函数

    • 作用:建立与服务器的连接。
    • 参数:
      • sockfd:指定要连接的套接字。
      • addr:指定服务器的地址信息。
      • addrlen:指定addr结构体的大小。

这些Socket函数与内核函数之间的关系可以用下图表示:

 +---------------------+                +---------------------+|     Application     |                |        Kernel       |+---------------------+                +---------------------+|                                         ||               Socket API                  ||              (e.g., socket(),            ||               bind(), listen())           ||------------------------->|                ||               System Calls                ||------------------------->|                ||                                         ||                Network Stack              ||------------------------->|                ||                                         ||               Network Hardware            ||<------------------------|                ||                                         |

服务端的代码 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>int main() {int server_fd, new_socket;struct sockaddr_in address;int opt = 1;int addrlen = sizeof(address);char buffer[1024] = {0};char *hello = "Hello from server";// 创建socket文件描述符if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}// 绑定socket到8080端口address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(8080);if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听此端口,等待客户端连接if (listen(server_fd, 3) < 0) {perror("listen");exit(EXIT_FAILURE);}// 接受客户端连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {perror("accept");exit(EXIT_FAILURE);}// 读取客户端发送的数据read( new_socket , buffer, 1024);printf("%s\n",buffer );// 向客户端发送数据send(new_socket , hello , strlen(hello) , 0 );printf("Hello message sent\n");// 关闭socketclose(server_fd);return 0;
}

客户端的代码: 

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>int main() {struct sockaddr_in serv_addr;int sock = 0;char *hello = "Hello from client";char buffer[1024] = {0};// 创建socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {printf("\n Socket creation error \n");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(8080);// 将IPv4地址从文本转换为二进制形式if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {printf("\nInvalid address/ Address not supported \n");return -1;}// 连接到服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {printf("\nConnection Failed \n");return -1;}// 向服务器发送数据send(sock , hello , strlen(hello) , 0 );printf("Hello message sent\n");// 读取服务器回传的数据read( sock , buffer, 1024);printf("%s\n",buffer );// 关闭socketclose(sock);return 0;
}

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

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

相关文章

开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测

参考文献&#xff1a; [1]Tian Z, Gai M. Football team training algorithm: A novel sport-inspired meta-heuristic optimization algorithm for global optimization[J]. Expert Systems with Applications, 2024, 245: 123088. 1.算法基本原理 足球队训练算法&#xff0…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法&#xff1f; 缓存穿透和缓存击穿的区别&#xff1f; 缓存雪崩 雪崩解决办法&#xff1f; 如何确保缓存和数据库数据的一致性&#xff1f; 常见的缓存更新策略&#xff1f; 缓存穿透 定义&#xff1a;缓存穿透说…

算法| ss 二叉树

二叉树的层序遍历 102. 二叉树的层序遍历 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : righ…

【科普】卫星如何定位汽车

卫星定位汽车的方法&#xff0c;主要依赖于全球定位系统&#xff08;GPS&#xff09;&#xff0c;它是一种结合卫星及通讯发展的技术&#xff0c;利用导航卫星进行测时和测距。用户接收机通过接收这些卫星播发的信号&#xff0c;可以测定其到卫星的距离并确定自身位置。下面&am…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

授人以渔 选购篇二:冰箱选购要点

文章目录 系列文章容量&#xff1a;每人约需70-80升空间门体类型与尺寸制冷方式&#xff1a;风冷变频能效等级&#xff1a;一级能效品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&#xff1a;冰箱选购要点 授人以渔 选购篇三&#xff1a;…

阿里巴巴蔡崇信:中国AI追赶神速,制造业霸主地位无可撼动!

快科技4月5日讯&#xff0c;阿里巴巴集团创始人兼董事长蔡崇信近日就AI技术领域及全球制造业形势发表看法。他认为&#xff0c;尽管中国在AI技术方面与美国有一定差距&#xff0c;但中国的追赶速度非常快。 AI-321 | 专注于AI工具分享的网站 AI工具集 | 人工智能工具箱 | 全球…

金三银四面试题(十五):Java基础问题(6)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 HashMap与ConcurrentHashMap 都是key-value 形式的存储数据&#xff1b; HashMap 是线程不安全的&#xff0c;ConcurrentHashMap 是JUC 下的线程安全的&#xff1b; HashMap 底层…

NumPy 数组对象

NumPy 数组对象 1. Example 12. Example 2References NumPy 数组一般是同质的 (但有一种特殊的数组类型例外&#xff0c;它是异质的)&#xff0c;即数组中的所有元素类型必须是一致的。这样有一个好处&#xff1a;如果我们知道数组中的元素均为同一类型&#xff0c;该数组所需的…

2024.4.6学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p315-p328 动态绑定机制 当调用方法对象的时候&#xff0c;该方法会和该对象的内存地址/运行类型绑定 当调用对象属性时&#xff0c;没有动态绑定机制&#xff0c;哪里声明&#xff0c;哪里使用 …

2024年ERP管理系统职业技能大赛软件测试赛项-销售专员模块Bug清单

目录 一、ERP管理系统说明: 二、销售专员模块部分Bug缺陷清单: 一、ERP管理系统说明: ERP(资源协同)管理平台将采购、销售、库存、服务等活动紧密衔接在一起,提供完整供应链服务࿰

【单片机】PMS5003,PM2.5传感器数据读取处理

文章目录 传感器介绍数据处理解析pm2.5的代码帮助、问询 传感器介绍 PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集 并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而 换算成为质量浓度,并以通用数字接口形式输出。本传感器可…

综测仪MT8862A控制方法

实现自动化控制&#xff0c;本次为大家讲解综测仪MT8862A的控制逻辑。 新建底层控制逻辑 在文件basis_contorl.py中写入仪器控制底层代码&#xff0c;代码如下&#xff1a; import tkinter.messagebox import pyvisaclass InstrumentControl(object):inst Nonedef __init__(…

Python中的scorecardpy.var_filter函数

scorecardpy是一个用于构建评分卡模型的Python库。在评分卡模型的构建过程中,变量选择是一个关键的步骤,而var_filter函数则是用于进行变量筛选的工具。本文和你一起来探索scorecardpy中的var_filter函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这…

【学习总结】Linux tmux 使用

1. 使用背景 本地连接服务器 AutoDL 训练模型时&#xff0c;使用 ssh 连接时&#xff1a; ssh -p xxxxx rootconnect.westc.gpuhub.com输入密码登录成功后 为了训练过程中本地和服务器始终连接&#xff0c;可以使用 tmux 终端复用工具开启后台训练 2. 安装 ~# sudo apt-ge…

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment &#xff08;部署&#xff09;是一种 Kubernetes 资源对象&#xff0c;用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态&#xff0c;并负责确保所需数量的 Pod…

聚簇索引与非聚簇索引b+树实现的区别

文章目录 聚簇索引非聚簇索引B树中聚簇索引的查找&#xff08;匹配&#xff09;逻辑B树中非聚簇索引的查找&#xff08;匹配&#xff09;逻辑 聚簇索引 特点&#xff1a; 索引和数据保存在同一个B树中 页内的记录是按照主键的大小顺序排成一个单向链表 。 页和页之间也是根据…

算法设计与分析实验报告c++java实现(矩阵链连乘、投资问题、完全背包问题、旅行商问题、数字三角形)

一、 实验目的 1&#xff0e;加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用动态规…

力扣回溯篇

文章目录 46.全排列78.子集17.电话号码的字母组合39.组数总和79.单词搜索131.分割回文子串 46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],…

Linux:IO多路转接之poll

文章目录 select的缺点pollstruct pollfd解决缺点的方式 代码实现 本篇总结的是poll的相关内容&#xff0c;在总结poll的内容前&#xff0c;先回顾一下select的缺点 select的缺点 select的缺点也比较明显 等待的fd是有上限的&#xff0c;在我们当前这个版本来说&#xff0c;…