在Linux网络编程中,errno是一个非常重要的变量。它记录了最近发生的系统调用错误代码。在编写网络应用程序时,合理处理errno可以帮助我们更好地了解程序出现的问题并进行调试。...通常,在Linux网络编程中发生错误时,errno会被设置为一个非零值。因此,在进行系统调用之后,我们应该始终检查errno的值。...我们可以使用perror函数将错误信息打印到标准错误输出中,或者使用strerror函数将错误代码转换为错误信息字符串。在网络编程中,处理网络连接、连接收发数据等经常会涉及到errno的处理。...连接的读写在 Linux 网络编程中,连接读写阶段可能会遇到以下 errno:EINTR:表示系统调用被中断,可以重新尝试读写EAGAIN 或 EWOULDBLOCK:表示当前没有数据可读或没有缓冲区可写...总结本文介绍了在 Linux 网络编程中处理 errno 的方法。
Linux Socket编程 ---- 目录 前言 Socket的功能 Socket基础 Socket类型 基本结构 基本转换函数 基本Socket使用 TCP Socket实例 UDP Socket实例...疑难问题记录 总结 ---- 前言 socket(套接字)是网络编程编程的一种技巧。...本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。...基本Socket使用 Linux同时支持面向连接和不连接类型的套接字。在面向连接的通讯中服务器和客户机在交换数据之前先要建立一个连接;在不连接通讯中数据被作为信息的一部分被交换。 ...网络编程非常有趣,能够实现天南海北之间的通讯,让远距离的人与人、人与物或者物与物之间产生联系,很有意思! 最后 用心感悟,认真记录,写好每一篇文章,分享每一框干货。
文章目录 前言 一、UDP是什么 二、UDP 数据报服务特点 二、UDP 编程流程 1.服务器 2.客户端 3.输出结果 总结 前言 浅谈UDP。...二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd
TCP/IP协议 TCP/IP 协议栈是一系列网络协议(protocol)的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。...OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...*address//协议族地址 ,socklen_t address_len); //协议族长度 - address: 协议族地址,通用的socket地址 通用的socket地址不是很好用,所以Linux
先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的《计算机网络》第五版,这本书难易适中。...详解的作者还写了另外2本经典著作,《Unix环境高级编程》,《Unix网络编程》二卷本。...说明:搞Linux网络编程的,想学TCP/IP的一定要看大师W.Richard Stevens这六本书,基本上六本书看完基础也就搭好了。 ? ? ? ? ? ?...网络体系结构:linux内核中网络协议的设计与实现》 ?...一并把内核结构和各功能在内核中的关系也搞清楚了。
在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。...一、UDP通信中服务端和客户端的基本编程框架 与TCP相比较,UDP是面向无连接的通信方式,不需要connect、listen、accept等函数操作,不用维护TCP的连接、断开等状态。...· 2、预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。...,会从给定的网络接口发送,另一个网络接口会忽略此数据 选项IP_ADD_MEMBERSHIP和IP_DROP_MEMBERSHIP:加入或者退出一个组播组其参数为一个结构体 使用组播的一个基本编程流程如下...这样在实际的使用过程中,程序运行经常性的会遇到这样的问题: Address already in use 例如我们的服务端通过广播的方式在网络上广播了自己的存在,告知其他主机自己的IP地址信息和与自己通信的方式
一,基础概念 数据报文在网络中的点对点传输方式通常有以下三种: 单播(Unicast): 数据报文从一个发送端到一个接收端的通信方式。...组播的实现需要设置组播地址 在IPv4中组播的地址范围是:224.0.0.0到239.255.255.255。...step.02:在sockaddr_in结构体中初始化组播的端口号。 step.03:设置IP_MULTICAST_LOOP等组播选项。...IP_MULTICAST_TTL:设置组播中数据报文的生存时间(TTL)。 IP_MULTICAST_LOOP:设置组播中数据报文的副本是否回传。...designs-examples-using-multicasting-af-inet https://os.mbed.com/handbook/Socket https://subingwen.cn/linux
相关API笔记(二) Linux网络编程高级I/O函数 1. pipe pipe函数用于创建一个管道,实现进程间通信 #include //成功返回0,失败返回-1并设置errno...file_descriptor_two); 参数: dup和dup2的参数都是文件描述符,具体作用如下: dup函数创建一个新的文件描述符,该新的描述符和原有文件描述符file_descriptor指向相同文件,管道或者网络连接...dup2(fd, STDOUT); printf("dup2"); close(fd); } 3. readv和writev readv函数将数据从文件描述符读到分散的内存块中,...即分散读 writev函数则将多块分散的内存数据一并写入文件描述符中,即集中写 #include ssize_t readv(int fd, const struct iovec...in_fd: 待读出内容的文件描述符,可理解为文件流入到in_fd中,我们需要从它这里读出数据。 offset: 指定从读入文件流的哪个位置开始读,如果为空,则使用读入文件流默认的起始位置。
外带标记 在实际应用中,我们通常无法预期带外数据何时到来。好在Linux内核检测到TCP紧急标志时,将通知应用程序有带外数据需要接收。...对这种情况,Linux给开发人员提供的解决方案是:对监听socket设置这些socket选项,那么accept返回的连接socket将自动继承这些选项。...网络信息API 利用域名获取IP地址 IP地址比域名发生变更的概率要高,所以利用IP地址编写程序并非上策。...addrinfo结构体中,ai_ protocol 成员是指具体的网络协议,其含义和socket系统调用的第三个参数相同,它通常被设置为0。ai_fags 成员可以取表中的标志的按位或。...getnameinfo和getaddrinfo函数成功时返回0,失败时返回错误码,可能的错误码如表: Linux下strerror函数能将数值错误码error转换成易读的字符串形式,同样下面的函数可将表错误码转换成字符串形式
网络编程基本概念 1.1 什么是套接字 套接字,也叫socket,是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。...网络通信,说白了就是进程间的通信(同一台机器上不同进程或者不同计算机上的进程间通信)。 在网络中,每一台计算机或者路由都有一个网络地址,就是IP地址。...所以在网络连接过程中,要把主机字节序和网络字节序相互对应起来,需要对这两个字节存储顺序进行转换。...Ipv6地址),而在socket编程中使用的则是32位的网络字节序的二进制值,这就需要对这两个数值进行转换。...在linux中,最常用的是gethostbyname()和gethostbyaddr(),它们都可以实现IPv4/IPv6的地址和主机名之间的转化。
相关API笔记(一) Linux网络编程基础API 1....通用socket地址 这个比较少用 socket网络编程接口中表示socket地址的是结构体sockaddr #include struct sockaddr{...} 实际使用时(包括sockaddr_storage)都需要将其转化为通用的socket地址类型sockaddr(强制转换即可),所以的socket编程接口使用的类型都是sockaddr。...多进程中,一个fork系统调用默认会让父进程中打开的socket文件描述符的引用数加一,因此得再父子进程中都调用close才能真正关闭一个连接。...应用程序得到了有带外数据需要接收的通知,还需要知道带外数据在数据流中的具体位置。
Socket编程 套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。...与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。 区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。...在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。...网络编程接口 首先先看一下网络套接字的函数以及具体实现流程图: 网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。...发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低地址
“IP地址+端口号”唯一标识网络通讯中的一个进程。...define INET6_ADDRSTRLEN 46 //如果len太小,不足以容纳表达式结果,那么返回一个空指针,并置为errno - sockaddr 数据结构 struct sockaddr :很多网络编程函数的出现早于...---- 网络套接字函数 基于流套接字的网络编程流程: //头文件 #include #include - socket函数 //socket...Linux通过这一值来排列网络队列。 这个值在0到6之间(包括0和6),由option_value指定。赋给sock->sk->sk_priority。...在Linux中,缓冲区内的最小字节数是固定的,为1。即将sock->sk->sk_rcvlowat固定赋值为1。 SO_RCVTIMEO,设置接收超时时间。
简介 本章主要讲解网络编程的基础知识,主要包括七层网络模型、常用通信协议、IP地址与子网掩码及端口号、字节序。 七层网络模型 讲到网络首先说一下最常见的网络模型,七层网络模型。...协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。...子网掩码:主要用于划分IP地址中的网络地址和主机地址,也可以判断两个IP地址是否在同一个局域网中,具体的划分方法如下: IP地址 & 子网掩码 => 网络地址 + 主机地址 网络编程中需要提供...:0x12 0x34 0x56 0x78 一般来说,在网络编程中需要将所有发送到网络中的多字节整数先转换为网络字节序再发送,将所有从网络中接收过来的多字节整数先转换为主机字节序再解析,而网络字节序本质就是大端系统的字节序...总结:以上概念都是网络编程中最常见最基础的知识点,这些都需要大家掌握。另预告一下,下一章将讲解非常重要的SOCKET网络编程,希望大家多多关注。
应用层:负责应用程序app之间的沟通,网络编程主要就是针对应用层,应用层和传输层之间有操作系统提供的系统调用接口。...应用层:网络编程主要针对于应用层,因为下面的四层大佬早就已经写好了,我们的编程主要是在应用层进行app程序之间的沟通,例如电子邮件传输,网络远程访问等。 7....二、 UDP网络套接字编程 1.网络通信的本质(port标识的进程间通信) 1. 只要有目的ip地址和源IP地址就能够完成客户端和服务器的通信了吗?...linux早已为我们提供好了一批字节序的转换API了。...套接字编程中,常见的有网络套接字编程,原始套接字编程,unix域间套接字编程。 网络套接字支持多主机跨网络通信,下面讲到的都是这个套接字编程。
数据传输错误在网络编程中,数据传输错误也是一种常见的异常情况。例如,如果远程服务器关闭连接或中途发生故障,可能会导致数据传输错误。...data.decode("utf-8"))except socket.error as e: print("Socket error:", e)finally: s.close()在上面的示例中,
网络编程中的异常处理是一项至关重要的任务。在编写网络应用程序时,需要考虑多种异常情况,如网络连接失败、超时、数据传输错误等。在 Python 中,网络编程使用 socket 模块来实现。...在本文中,我们将介绍 Python 中 socket 模块的异常处理机制,并提供一些示例。异常处理机制Python 中 socket 模块提供了一些异常类来处理不同的异常情况。...在编写网络应用程序时,需要在适当的位置捕获这些异常。通常,需要将所有的 socket 操作都包含在 try-catch 语句块中。...data.decode("utf-8"))except socket.error as e: print("Socket error:", e)finally: s.close()在上面的代码中,
连接超时在网络编程中,连接超时是一种常见的异常情况。当尝试连接到一个不可达的主机时,可能会发生连接超时异常。...Connection timed out")except socket.error as e: print("Socket error:", e)finally: s.close()在上面的代码中,
零、前言 本章主要是对套接字网络编程的一个学习,目标是能够基本的进行套接字编程 一、UDP套接字 1、创建套接字 无论是服务端还是客户端,进行网络编程需要做的第一件事就是创建套接字 socket...return 2; } std::cout<<"sock:"<<sock<<std::endl; 2、填写ip/port和绑定 对于服务端和客户端都要进行绑定ip及port,只有绑定后才能标识网络中唯一的主机中的进程服务...struct sockaddr_in成员: sin_family:表示协议家族 sin_port:表示端口号,是一个16位的整数 sin_addr:表示IP地址,是一个32位的整数 sin_addr中的成员...服务端创建套接字,即底层打开了对应的网络套接字文件,想进行网络通信还需要绑定对应的网络信息,即将套接字文件与网络进行强相关 bind函数函数原型: int bind(int sockfd,...类型) UDP是数据报式套接字,并不会管对端的接收转态,只要绑定后就可以向对端进行接收消息了,但是这样的传输实际中是存有风险的 示例:服务端 //创建套接字结构体-填入ip及port struct
Linux网络编程套接字 零、前言 一、网络基础知识 1、源IP地址和目的IP地址 2、源MAC地址和目的MAC地址 3、认识端口号 4、PORT VS PID 5、TCP和UDP协议 6、网络字节序...二、socket编程接口 1、sockaddr结构 2、socket 常见API 零、前言 本章就Linux网络编程进行概念及接口学习,下一篇则是简单的进行上手网络套接字编程 一、网络基础知识 1...、源IP地址和目的IP地址 在数据传输时各网络协议栈会对数据进行报头封装,而在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 网络中每台计算机都有一个唯一的IP地址,也就是说网络中用...UDP协议足够简单 6、网络字节序 我们知道,不同的主机在存储数据时是有大小端之分的,同样的网络数据流也有大端小端之分 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;接收主机把从网络上接到的字节依次保存在接收缓冲区中...但是在套接字编程时需要填入的一些数据字段是需要我们主动进行网络字节序的转化 为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换
领取专属 10元无门槛券
手把手带您无忧上云