【Linux】网络编程入门(TCP + UDP)

news2025/1/24 5:46:09

目录简述:

前言:

一、网络通信概述

二、网络编程主要函数

(1)socket函数

(2)bind函数

(3)bind函数

(4)accept函数

(5)connect函数

(6)send函数

(7)recv函数

(8)recvform函数

(9)sendto函数


前言:

初始环节:带着以下的问题,针对性的阅读实践,更容易深入

(1)什么是网络通信?

  • ①网络中的数据传输,基本元素有哪些?
  • ②一般网络协议的五层结构,每一层的作用是什么?
  • ③传输层协议的TCP和UDP,它们的特点是什么?应用场景?
  • ④TCP/UDP网络通信流程是怎么样的?

(2)网络编程主要函数介绍

接下来的文章内容,将详细的解答上面的问题。如果有一些些帮助,不妨三连关注( ^_^ )。

一、网络通信概述

什么是网络通信?

网络通信是指两台或多台计算机之间的连线通讯,以完成网络服务的过程。它是构成互联网的重要一环,以及为用户提供从一台计算机到另一台计算机的远程连接的计算机网络通讯方式。

网络通信中最重要的就是网络通信协议。常用的通讯协议有TCP/IP协议、IPX/SPX协议、NetBEUI协议。

①网络中的数据传输,基本元素有哪些?

所有的数据传输,都有三个元素:源、目的、长度。在网络传输中是使用“IP和端口”来表示源或目的。如下图所示:

 在传输中,是有两个对象,服务器和客户端。客户端主动发起请求,服务器被动地响应请求。

②网络协议是非常重要的,一般网络协议的五层结构,每一层的作用是什么呢?

  • 应用层:它是体系结构中的最高层,直接为用户的应用进程(例如电子邮件、 文件传输和终端仿真)提供服务
  • 运输层:负责向两个主机中进程之间的通信提供服务。传输层主要使用的两种协议,TCP和UDP。
  • 网络层:负责将被称为数据包(datagram)的网络层分组从一台主机移动到另一台主机。
  • 链路层:因特网的网络层通过源和目的地之间的一系列路由器路由数据报。
  • 物理层:在物理层上所传数据的单位是比特。物理层的任务就是透明地传送比特流。

这里,我们需要“运输层”编写应用程序,我们的应用程序位于“应用层”。

③TCP和UDP是什么?它们的特点是什么?应用场景?

(1)传输控制协议 TCP(Transmission Control Protocol):面向连接的,数据传输的单位是报文段,能够提供可靠的交付。

TCP 向它的应用程序提供了面向连接的服务。这种服务有 2 个特点:可靠传输、流量控制(即发送方/接收方速率匹配)。它包括了应用层报文划分为短报文,并提供拥塞控制机制。

(2)用户数据包协议 UDP(User Datagram Protocol) :无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“ 尽最大努力交付
UDP 协议向它的应用程序提供无连接服务。它没有可靠性,没有流量控制,也没有拥塞控制。
UDP 时,有如下特点:
  • 关于何时发送什么数据控制的更为精细
  • 采用 UDP 时只要应用进程将数据传递给 UDPUDP 就会立即将其传递给网络层。而 TCP 有重传机制,而不管可靠交付需要多长时间。但是实时应用通常不希望过分的延迟报文段的传送,且能容忍一部分数据丢失。
  • 无需建立连接,不会引入建立连接时的延迟。
  • 无连接状态,能支持更多的活跃客户。
  • 分组首部开销较小。
在很多场景下,能够接受偶尔的丢包,使用UDP的效果会更加的好,例如视频语言通话。
④TCP/UDP网络通信流程是怎么样的?

TCP网络通信流程如下图所示: (服务器为例)

  • 创建一个套接字(socket)
  • 将地址绑定到套接字上(bind)
  • 宣告服务器可以接受连接请求(listen)
  • 获得连接请求,并建立连接(accept)
  • 发送和接受数据(send、receive)
  • 结束连接(close)

 UDP网络通信流程如下图所示: (服务器为例)

  • 创建一个套接字(socket)
  • 将地址绑定到套接字上(bind)
  • 发送和接受数据(sendto、receiveform)
  • 结束连接(close)

二、网络编程主要函数

(1)socket函数

int socket(int domain, int type,int protocol);

  1.domain:网络程序所在的主机采用的通讯协族(AF_UNIX AF_INET )

  2.type: 网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM )

  • SOCK_STREAM对应的TCP。
  • SOCK_DGRAM对应的UDP

protocol:  指定了type,这个地方一般只要用0来代就可以了。

(2)bind函数

int bind(int sockfd, struct sockaddr *my_addr, int addrlen);

  1.sockfd: 是由 socket 函数调用返回的文件描述符。

  2.my_addr: 是一个指向 sockaddr 的指针。

  3.addrlen: 是 sockaddr 结构的长度。

(3)bind函数

int listen(int sockfd,int backlog);

listen函数将 bind 的文件描述符变为监听套接字,返回的情况和 bind 一样。

  1.sockfd: 是 bind 后的文件描述符。

  2.backlog:设置请求排队的最大长度。当有多个客户端程序和服务端相连时,使用这个表示可以介绍的排队长度。

(4)accept函数

int accept(int sockfd, struct sockaddr *addr,int *addrlen);

accept 调用时,服务器端的程序会一直阻塞到有一个客户程序发出了连接。accept 成功时返回最后的服务器端的文件描述符,这个时候服务器端可以向该描述符写信息了,失败时返回-1 。

  1.sockfd: 是 listen 后的文件描述符。

  2.addr,addrlen: 是用来给客户端的程序填写的,服务器端只要传递指针就可以了, bind,listen和 accept 是服务器端用的函数。

(5)connect函数

int connect(int sockfd, struct sockaddr * serv_addr,int addrlen);

可以用 connect 建立一个连接,在 connect 中所指定的地址是想与之通信的服务器的地址。

  1.sockfd:socket 函数返回的文件描述符。

  2.serv_addr:储存了服务器端的连接信息,其中 sin_add 是服务端的地址。

  3.addrlen:serv_addr 的长度

connet函数是客户端用来同服务端连接的.成功时返回 0,sockfd 是同服务端通讯的文件描述符,失败时返回-1。

(6)send函数

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

客户或者服务器应用程序都用 send 函数来向 TCP 连接的另一端发送数据。

  1.sockfd 指定发送端套接字描述符;

  2.buf 指明一个存放应用程序要发送数据的缓冲区;

  3.len 指明实际要发送的数据的字节数;

  4.flags 一般置 0。

(7)recv函数

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

客户或者服务器应用程序都用 recv 函数从 TCP 连接的另一端接收数据。

  1.sockfd 指定接收端套接字描述符;

  2.buf 指明一个缓冲区,该缓冲区用来存放 recv 函数接收到的数据;

  3.len 指明 buf 的长度;

  4.flags 一般置 0。

(8)recvform函数

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
 struct sockaddr *src_addr, socklen_t *addrlen);

  1.recvfrom: 通常用于无连接套接字,因为此函数可以获得发送者的地址。

  2.src_addr: 是一个 struct sockaddr类型的变量,该变量保存源机的 IP 地址及端口号。

  3.addrlen: 常置为sizeof(struct sockaddr)。

(9)sendto函数

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
 const struct sockaddr *dest_addr, socklen_t addrlen);

sendto 和 send 相似,区别在于 sendto 允许在无连接的套接字上指定一个目标地址。

  1.dest_addr: 表示目地机的 IP 地址和端口号信息

  2.addrlen: 常常被赋值为sizeof(struct sockaddr)。

  3.sendto: 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。

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

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

相关文章

AttributeError: ‘LTP‘ object has no attribute ‘seg‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Jenkins 2.x 实践指南】2.7 pipeline -- 章节小结

目录 一、 pipeline入门 1. pipeline 是什么 2. Jenkinsfile 又是什么 3. pipeline语法 的选择 4. 创建第一个pipeline - helloworld Stage 1: 创建任务 Stage 2: 创建流水线 - Hello World Stage 3: 编写 pipeline 声明 Stage 4: 执行 Stage 5: 点击 #1 查看日志 …

2023年 中国制造业这三大趋势不可忽视

政府要掏1个亿奖励制造企业搞发展,我国制造业大翻身的时代来了吗? 4月12日成都日报电,为支持制造业创新发展,支持制造业数字化、智能化和绿色化转型升级,培育高精尖特企业,政府给扶持政策不说,…

2.5亿行文本数据,导入到SqlServer需要多久?

今天测试了一下SqlServer的导入性能,数据库版本是SqlServer2008r2。 数据源是大概5000个文件,总共12.7G的大小的文本文件, 自己做的导入工具,利用多线程导入,总共耗费了大概1个小时。 导入后的总行数达到2.5亿多行&am…

Linux 安装tomcat教程

前言 PS:安装tomcat需要先配置jdk 1.Tomcat下载 1.1.Tomcat安装包下载 1. 可以选择直接在omcat官网Apache Tomcat - Apache Tomcat 9 Software Downloads下载,上传至linux服务器 1.2. 主机wget源下载 也可以通过直接在linux直接下载 #执行命令 wge…

Spring AOP: 多切面的顺序,性能及异常监控

目录标题 一、Sprig的AOP操作JDK动态代理CGLib动态代理基于xml开发Spring AOP基于注解开发Spring AOP 二、多切面的顺序基于注解的配置基于Ordered接口配置基于XML配置 三、性能及异常监控性能监控异常监控 四、工程目录及运行结果图 一、Sprig的AOP操作 JDK动态代理 //接口 …

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望。考察期间,夏宝龙主任参观了香港科大的空气动力学和声学实验中心,以及香港科大先进显示与光电子技术国…

【花雕学AI】找出合适的提示词—让ChatGPT发挥出最大的潜力与价值

ChatGPT 是一种基于人工智能技术的自然语言处理系统,它可以回答各种问题,提供有用的信息和建议。然而,要让 ChatGPT 发挥出最大的潜力和价值,我们需要使用一些提示词来帮助它更好地理解我们的问题和需求。这些提示词包括明确、详细…

WPF 看板组件:Kanban Library for WPF 4.2 Crack

WPF 的看板组件。 适用于 WPF 的 DlhSoft 看板库可帮助您在 WPF 应用程序中创建交互式看板。它包括可自定义的状态、可扩展的组、可拖动的项目、可选菜单等等。 用于 WPF 功能的 DlhSoft 看板库 交互式板- 可定制的状态、可扩展的组、可拖动的项目、可选菜单。根据需要注入您自…

D. Restore Permutation(树状数组 + 二分)

Problem - D - Codeforces 一个由整数p1,p2,...,pn组成的数组,如果它包含1到n中的每一个数字恰好一次,则称为一个排列组合。例如,下面的数组就是排列组合: [3,1,2], [1], [1,2,3,4,5] 和 [4,3,1,2]. 下列数组不是排列组合&#x…

「线性DP」合唱队形

合唱队形 https://ac.nowcoder.com/acm/contest/24213/1011 题目描述 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高…

搭建静态网页

day3作业 请给openlab搭建web网站​ 网站需求:​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!!​ 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com…

第三章(4):自然语言处理入门

第三章(4):自然语言处理入门 在本节中,我们将在简单文本数据上(例如一个句子上),执行一系列基本操作,来帮助你熟悉NLP的工作原理,其中一些技术在第三章(2&…

DDoS攻击手段发生重大转变 网络空间面临未知威胁

2023年第一季度,DDoS攻击手段出现重大转变。攻击开始攻陷破坏的虚拟专用服务器(VPS),而非传统的受感染物联网设备。这标志着DDoS攻击力度出现质的飞跃,网络空间安全迎来新的挑战。 网络空间测绘技术可以探测、采集、分析和处理网络空间数据&…

JeTSON Xavier NX TX2_NX 暗转yolov5 v6.2使用Tensorrt加速实现USB摄像头和CSI摄像头的目标识别及采坑记录

本文是参考各位博客朋友的笔记做了实操整理勿喷。 硬件设备nvidia JETSON NX TX2_NX 软件版本BSP3273(Jetpack4.6.3)再次分享一下刷机指导 Jetson Linux R32.7.3 NVIDIA Jetson Linux 驱动程序包是 Jetson™ 的主板支持包。它包括Linux内核,UEFI引导加载程序&am…

「SAP ABAP」OPEN SQL(十)【SQL性能优化(一)】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

mybatis-plus mpw 基于nacos-配置中心失效问题解决。

先谈谈个人理解: 配置中心下的配置加密做不做其实意义不大。 1、首先nacos console 内网化,受到攻击概率很低 2、加密后,各namespace 下的配置信息查看不友好。增加开发成本 3、对称加密既然组员都有密码了,还谈何来的秘密。 4、有…

【嵌入式环境下linux内核及驱动学习笔记-(4-字符驱动实例)】

目录 1、完整的字符设备驱动的模板2、相关函数2.1 container_of()2.2 kmalloc2.3 copy_to_user()2.4 copy_from_user()2.5 系统调用open()2.6 系统调用read2.7 系统调用write2.8 系统调用close 3、实例:多个同类字符设备的驱动3.1 驱动代码3.2 测试 1、完整的字符设…

【C语言】初阶指针(指针及其类型以及野指针)

简单不先于复杂,而是在复杂之后。 目录 1. 指针是什么? 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 1. 指针是什么? 指针理解的两个要点: 1. 指针是内存中最小…

HCLE--虚拟机安装ntp等相关服务出现报错解决和通过SSH实现免密登录

.1 在服务端主机上安装ntp服务: yum install ntp 1.2 修改/etc/ntp.conf文件,将默认的ntp服务器地址替换为可用的ntp服务器地址。例如: server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp3.aliyun.com iburst 1…