TCP/IP网络编程:理解网络编程和套接字

TCP/IP网络编程:理解网络编程和套接字

网络编程又叫做套接字编程,是因为在网络编程中依赖使用套接字(socket),网络编程一般是C/S架构,即客户端/服务器模式,在服务器端依赖套接字绑定自身接口,并开启监听客户端连接,然后进行读写操作;客户端则依赖套接字进行接口连接,以进行收发操作。

服务器端

服务器端遵循以下步骤进行搭建

  1. 创建套接字
  2. 绑定监听端口
  3. 开始监听
  4. 接受连接
  5. 进行读写操作
  6. 关闭连接

下面是创建服务器端通讯的实例

//步骤1:创建套接字int server_sock;server_sock = socket(PF_INET,SOCK_STREAM,0);if (server_sock == -1){error_handing("socket() error");}//步骤2:绑定监听端口struct sockaddr_in server_addr;memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(atoi("3333"));if (bind(server_sock,(struct sockaddr *)&server_addr,sizeof(server_addr)) == -1){error_handing("bind() error");}//步骤3:开启监听if (listen(server_sock,5) == -1){error_handing("listen() error");}//步骤4:接受连接int accept_sock;struct sockaddr accept_addr;socklen_t len = sizeof(accept_addr);accept_sock = accept(server_sock,&accept_addr,&len);if (accept_sock == -1){error_handing("accept() error");}//步骤5:开始通讯char message[10];if (read(accept_sock,message,10) == -1){error_handing("read() error");}printf("Read message is %s\n",message);if (write(accept_sock,message,10) == -1){error_handing("write() error");}//步骤6:关闭连接close(accept_sock);close(server_sock);

客户端

客户端遵循以下步骤进行搭建

  1. 创建套接字
  2. 指定端口连接
  3. 进行通讯
  4. 关闭连接

下面是创建客户端通讯的实例

//步骤1:创建套接字int client_sock;client_sock = socket(PF_INET,SOCK_STREAM,0);if (client_sock == -1){error_handing("socket() error");}//步骤2:连接端口struct sockaddr_in connect_addr;connect_addr.sin_family = AF_INET;connect_addr.sin_addr.s_addr = inet_addr("127.0.0.1");connect_addr.sin_port = htons(3333);if (connect(client_sock,(struct sockaddr *)&connect_addr,sizeof(connect_addr)) == -1){error_handing("connect() error");}//步骤3:进行通讯if (write(client_sock,"nihao",sizeof("nihao")) == -1){error_handing("write() error");}char buffer[30];if (read(client_sock,buffer,30) ==  -1){error_handing("read() error");}printf("Receive message is %s\n",buffer);//步骤4:关闭连接close(client_sock);

网络套接字和文件描述符

在Linux环境中,操作网络套接字和文件描述符是一样的,上面实例中使用write()和read()函数操作网络套接字,
用法跟操作文件描述符别无二致,操作系统自动绑定了0、1、2对应I/O描述符的标准输入、标准输出和标准错误

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

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

相关文章

Spring中lazy-init属性

Spring中lazy-init属性 1. 在 Spring 框架中的 lazy-init 属性 在 Spring 框架中,lazy-init 属性主要用于控制 Spring 容器中 Bean 的初始化时机。 含义: 当一个 Bean 被定义在 Spring 的配置文件(可以是 XML 配置或者基于注解的配置等效场景…

多处理机调度(李昂学长视频总结)25新增考点

多处理机定义:多处理机指的是某个计算机系统中有多个cpu,在多处理机调度中,多处理机一般指的是共享存储器处理机,其两个或更多的cpu全部共享一个公用的RAM。 根据系统中的处理机相同与否,可将多处理机系统分为如下两类…

开源目标检测和语义分割都有哪些方法

在开源社区中,目标检测和语义分割都有许多广泛使用的方法和框架,以下是一些主流的方法: 1. 目标检测方法 目标检测的主要任务是识别图像中的物体并给出其位置(通常为边界框),以下是常用的开源方法&#x…

少儿编程培训市场突破500亿元:教育新蓝海的崛起与未来展望

近年来,随着科技的迅速发展和家长对教育方式的重视,少儿编程市场成为一片新的蓝海。据最新市场调研报告显示,2024年中国少儿编程培训市场规模已突破500亿元,预计未来五年将持续增长。这一趋势反映了少儿编程教育的迅速崛起&#x…

【大数据学习 | kafka】producer的参数与结构

1. producer的结构 producer:生产者 它由三个部分组成 interceptor:拦截器,能拦截到数据,处理完毕以后发送给下游,它和过滤器不同并不是丢弃数据,而是将数据处理完毕再次发送出去,这个默认是不…

【论文速读】Optimization-based Prompt Injection Attack to LLM-as-a-Judge

基于优化的提示词注入攻击 摘要引言问题描述LLM-as-a-judge威胁模型攻击者知道什么 JUDGEDECEIVER 细节概述生成影子候选回复公式化为优化问题Target-aligned generation lossTarget-enhancement lossAdversarial perplexity loss优化问题 求解优化问题 摘要 LLM-as-a-Judge 利…

人工智能证书合集

本文将对目前市面上主流官方机构颁发的人工智能证书进行整理和介绍,由于整理的证书较多,本文共一万八千多字,请根据自己的考证需求阅读对应部分的内容,希望本文对人工智能行业的从业人员和计划从事人工智能相关岗位工作的人员有所…

Java入门8——二维数组

今天的内容算是数组的收尾~~ 从下次开始就要开始学习类和对象了,冲冲冲! 首先二维数组,也很好理解,就是把几个一维数组拼在一起了,我们用代码来熟悉一下~ public class javaSchool {public static void main(String[…

自动售饮料机控制电路的设计

自动售饮料机控制电路的设计 1 设计目的 (1)熟悉数字电路的应用。 (2)掌握常常利用逻辑运算器及D触发器的逻辑功能及利用方式。 (3)熟悉电路仿真软件Multisim 利用。 (4)了解自动售饮…

高速高精运动控制解决方案亮相2024 NEPCON亚洲电子展!

■展会名称: NEPCON ASIA 2024 亚洲电子生产设备暨微电子工业展览会(以下简称“亚洲电子展”) ■展会日期 2024年11月6 -8日 ■展馆地点 中国深圳国际会展中心(宝安) ■展位号 11号馆-11A24 11月6日至8日,亚洲电子展将在中…

Flask轻松上手:从零开始搭建属于你的Web应用

目录 一、准备工作 二、安装Flask 三、创建你的第一个Flask应用 创建一个新的Python文件 编写Flask应用代码 运行Flask应用 四、创建一个简单的博客系统 定义路由和文章列表 创建模板文件 运行并测试博客系统 五、使用数据库存储用户信息 安装Flask-SQLAlchemy 修…

STM32开发 —— 新工程创建思路终于清晰了

目 录 工程创建三步法一、工程文件夹创建二、管理工程项三、配置工程参数 工程创建三步法 从ST官网下载好stm32标准库或HAL库,HAL库目录如下。 在Keil开发环境中创建STM32工程,分三大步即可完成工程的创建: 一步:在本地磁盘创建…

Java SpringBoot调用大模型AI构建AI应用

本文是一个用springboot 结合spring mvc 和spring ai alibaba 调用国产大模型通义千问的具体例子,按照这个做能够快速的搞定Java应用的调用。 然后就可以把这类应用泛化到所有的涉及到非结构化数据结构化的场景中。 Spring AI:简化Java中大模型调用的框…

【办公类-04-04】华为助手导出照片视频分类(根据图片、视频的文件名日期导入“年-月-日”文件夹中,并转移到“年-月”文件中整理、转移到“年”文件夹中整理)

背景需求 最近带班,没有时间整理照片,偶尔导一次,几个月的照片。发现用电脑版“华为手机助手“中的WLAN连接”与华为手机的“华为手机助手”连接,速度更快、更稳定,不会出现数据线连接时碰碰就断网的问题 1、先打开电…

电脑没有下载声卡驱动怎么办?电脑声卡驱动安装方法

在日常使用电脑的过程中,我们可能会遇到电脑没有声音的问题,这往往与声卡驱动缺失或损坏有关。声卡驱动是连接电脑硬件(声卡)与操作系统之间的桥梁,确保音频信号能够正常输入输出。那么,当电脑没有声卡驱动…

MYSQL死锁真实案例

​最近例行巡检时候发现一个死锁,阿里云RDS FOR MYSQL 8.0.X! 虽然阿里云的死锁页面看起来比较友好,不过跟社区版一样只是显示事务最后一条死锁SQL和相关的信息.一不小心对初级MYSQL DBA来说,深深地误导,浪费大量时间研究这两个SQL怎么发生了死锁! 阿里云RDS默认情况下审计没有…

CSS3简介(一)

1、CSS3简介 CSS3(层叠样式表3级)是用于控制网页外观设计的一种样式表语言,它是CSS2的继承者,并且是目前最为先进的版本之一。CSS3为Web设计师提供了更多功能强大的工具来创建更加动态和美观的网站。 以下是一些CSS3的主要特点和新…

【ShuQiHere】探索等差数列:数学中的基础与应用 ✨

【ShuQiHere】 📐✨ 在数学的广阔领域中,等差数列(Arithmetic Sequence)是一个基础而重要的概念。无论是在学术研究、工程应用,还是在日常生活中,等差数列都扮演着关键角色。本博客将深入探讨等差数列的定…

【Spring】Spring Boot 日志(8)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 目录 本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 …

Flink处理乱序的数据的最佳实践

目录 网络延迟和分布式系统 事件时间与处理时间的差异 事件时间和水位线(Watermark) 时间窗口(TimeWindow) 滚动窗口(Tumbling Window) 滑动窗口(Sliding Window) 会话窗口(Session Window) 自定义Watermark生成策略 设置允许延迟和侧输出 设置允许的最大延迟时间 使…