文章目录 前言 一、UDP是什么 二、UDP 数据报服务特点 二、UDP 编程流程 1.服务器 2.客户端 3.输出结果 总结 前言 浅谈UDP。...二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd...sockaddr*)&caddr,sizeof(caddr)); } close(sockfd); exit(0); } 2.客户端 代码如下(示例): int main() { int sockfd = socket
Socket soket接口是TCP/IP网络的API。网络的socket数据传输是一种特别的I/O,socket也是一种文档描述符。...0 socket描述符是一个指向内部数据结构的指针,执行描述符表的入口 两个网络程式之间的一个网络连接包括:通信协议、本地协议地址、本地主机端口、远端主机地址、远端协议端口 socket...地址 my_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 客户端的填充IP方式 bind函数需要将sin_port和sin_addr转换成为网络字节有限顺序...,而sin_addr则无需转换 internet上数据以高位优先 顺序传输,故需要实现进行转换 htonl(); 把32位值从主机字节序转换为网络字节序 htons(); 把16位值从主机字节序转换为网络字节序...ntohl(); 把32位值从网络字节序转换为主机字节序 ntohs(); 把16位值从网络字节序转换为主机字节序 bind函数在成功调用后,返回0,出错返回-1并将errno设置为响应的错误号
Linux Socket编程 ---- 目录 前言 Socket的功能 Socket基础 Socket类型 基本结构 基本转换函数 基本Socket使用 TCP Socket实例 UDP Socket实例...疑难问题记录 总结 ---- 前言 socket(套接字)是网络编程编程的一种技巧。...本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。...总结 socket的实现非常优秀,将复杂的网络通信,封装成简单的socket的接口。使用者不用过多考虑TCP、UDP以及其他较底层的网络概念,而快速的实现一套网络通讯的流程。...本文仅列举了socket用于inet地址族的例程,其还可以用于UNIX域的进程间通讯。 网络编程非常有趣,能够实现天南海北之间的通讯,让远距离的人与人、人与物或者物与物之间产生联系,很有意思!
在前面的文章中,我们使用了UDP进行网络编程,这篇文章我们就来使用另一个TCP进行网络编程,我们知道UDP和TCP都是传输层协议,但是特点不同,前者无连接,不可靠传输,面向数据报,后者有连接,可靠传输...大体框架 1.1 补充 首先,在之前的UDP网络编程中,我们是直接使用的硬编码,例如退出码直接就设为1、2、3等,显然这并不是一个很好的选择,那么这里我们可以统一设计一个服务器的退出码,就像之前设计日志等级一样...如何设置: 可以设置为 SOMAXCONN(定义在 sys/socket.h 中),让系统使用一个默认的、相对较大的合理值(在Linux上,通常可以通过 /proc/sys/net/core/somaxconn...直接向目标服务器发起建立连接的请求 return 0; } 我们这里也不需要显式bind,关于原因我们在udp网络编程时已经说明了,那我们应该做什么呢?...,上层服务我们可以和UDP网络编程一样,直接在服务端主程序调用其他的服务,就比如之前实现的翻译和路由转发,然后在服务端接收数据时,将数据回调处理,最后将结果写回客户端。
1、网络字节序和主机字节序 网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。...网络字节序采用big endian排序方式。 不同的CPU有不同的字节序类型,这些字节序是指 整数 在内存中保存的顺序,这个叫做主机字节序,有大端小端两种。...unsigned long s_addr; }; 3、inet_addr和inet_ntoa 函数inet_addr(),将IP地址从字符串转换成无符号长整型,注意,inet_addr()返回的地址已经是网络字节格式...常用的协议族有AF_INET type:指定socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW等等(socket的类型有哪些?)。...在这种情况下,listen syscall的backlog参数表示完成队列的大小 8、accept()函数 accept()函数实际做的是在已完成连接队列列头返回下一个已完成连接,服务器三路握手在listen
个人主页:island1314 个人专栏:Linux—登神长阶 1....这就要在网络的背景下,在系统中,标识主机的唯一性。 在进行网络通信的时候,是不是我们的两台机器在进行通信呢?...所以这两个协议在各自特定的场景下,发光发热 TCP:银行,支付...(在网络联通的情况下,丢包可找回) UDP:信息派发,例如直播... 5....Socket 编程 6.1 socket 常见API Socket API 是一层网络编程接口,抽象了底层的网络协议,定义在 netinet/in.h 中。...实际上在网络上通信的时候套接字种类是比较多的,下面是常见的三种: unix 域间套接字编程--同一个机器内 原始套接字编程--网络工具 网络套接字编程--用户间的网络通信 设计者想将网络接口统一抽象化
将数据视为连续的字节流进行传输,没有明确的消息边界,应用层数据可以在任意时刻以任意大小发送 传输效率相对较低:由于需要进行连接建立、确认、重传等操作,TCP 的传输效率相对 UDP 较低,但在对数据准确性要求高的场景下是必要的...,这些协议各自承担着不同的功能,共同协作以实现网络通信,下面这些内容需要的看一下,这里主要是指出每层都有多种协议,所以在数据解析的过程中,都是通过报头里面的源xx号和目标xx号起到的作用,精确找到要找到哪个协议解析...编程基础 1、调用接口 (一)创建描述符 #include socket.h> int socket(int domain, int type, int protocol); 返回值:成功返回套接字描述符...protocol:指定了使用的具体协议,通常将其设为 0,这样系统会根据 domain 和 type 自动选择合适的协议 (二)绑定端口号 #include socket.h> int bind...addrlen); 返回值:成功返回一个新的套接字描述符,这个新的套接字专门用于与发起连接请求的客户端进行数据传输,原来的 sockfd 仍然用于继续监听其他客户端的连接请求 sockfd:这是由 socket
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地 位的组织或者公司, 下面是文心一言生成的标准制定组织, 大家看一下就可以。...之前我们在学习系统编程的时候知道访问公共资源就是临界资源,那么这里的局域网就是一个临界资源(以太网中, 任何时刻, 只允许一台机器向网络中发送数据)。...: IP 网络层存在的意义: 提供网络虚拟层, 让世界的所有网络都是 IP 网络, 屏蔽 最底层网络的差异 Socket 编程预备 理解源 IP 地址和目的 IP 地址 IP在网络中是用来标识主机的唯一性...sockadder结构 socket API 是一层抽象的网络编程接口,适用于各种底层网络协议,如 IPv4、 IPv6,以及 后面要讲的 UNIX Domain Socket....关于Socket套接字编程后续文章会详细讲解。
在上篇文章中,我们了解到网络传输的基本流程,从局域网传输到跨网传输,也了解到在传输时需要封装和解包,接下来我们就要为下篇文章Socket编程作预备,我们需要通过理论加实战来输入了解,所以这篇文章会对Socket...编程前铺垫一些知识概念 1....5. socket编程接口 5.1 socket 常见API // 创建 socket ⽂件描述符 (TCP/UDP, 客⼾端 + 服务器) int socket(int domain, int type..., const struct sockaddr *addr, socklen_t addrlen); 这里我们先了解一下这些接口,后面Socket编程时会详细介绍这些接口。...仔细观察一下,我们可以发现大部分接口都有sockaddr结构体 5.2 sockaddr结构 socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及后面要讲的UNIX
简介 Socket理论 Socket工作流程 核心函数讲解 服务的如何获取客户端的信息 字符串ip和网络二进制的转换 大小端问题 示例源代码 Linux内核源码 Socket理论 socket起源于Unix...,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。...注意: 其实socket也没有层的概念,它只是一个facade设计模式的应用,让编程变的更简单。是一个软件抽象层。在网络编程中,我们大量用的都是通过socket实现的。...文件描述符和文件指针的区别: 文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。...大端转小端 ntohs 将一个16位数由网络字节顺序 ntohl 将一个无符号长整形数从网络字节顺序 示例源码 ?
网络通信部分 首先我们网络通信不需要改变,只需要稍微修改添加一些新的变量,服务端在接收客户端发来的数据,然后回调去处理翻译这个动作,所以我们可以使用包装器function来包装一个函数指针,用于回调处理翻译...error"; exit(1); } LOG(LogLevel::INFO) socket success, socketfd: " <...Udpserver.cc 服务端主程序已经有网络通信的功能了,我们现在只需要实例化字典对象,先加载字典到哈希表中,再在网络通信时进行翻译 代码如下: #include #include...buffer[m] = 0; std::cout << buffer << std::endl; } } return 0; } 运行测试一下:...}); 那么包装器也需要增加一个参数 using func_t = std::function; 再来测试一下
上篇文章我们实现了英译汉的网络字典,客服端向服务端发送英文,服务端接收数据后回调处理,将翻译后的中文再转发给客户端,这其实和EchoSever一样都是一对一的网络通信。...UdpServer.hpp——服务端通信 这里我们服务端需要修改一下,我们现在接收客户端发来的消息后,并不是要将该消息处理好之后再次转发回原来的客户端,而是需要回调进行路由转发,将消息转发给所有在线用户...sender.Join(); return 0; } 由于我们创建两个线程之后的执行函数,我们定义在了全局,所以我们需要用到的一些变量也需要改成全局才能在线程中使用 运行测试一下:...因此,在多线程环境下,推荐使用 inet_ntop。...目标缓冲区,用于存储转换后的字符串 size:目标缓冲区的大小 返回值 成功:指向 dst 的指针 失败:NULL,设置 errno 所以我们下面可以将 InetAddr 类中的网络字节序转换为点分十进制字符串格式的函数修改一下
前言 在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。...今天我们继续来介绍网络编程里面的其它接口函数,为实战打下 基础;网络编程专题文章拖的有点久,这两天全部把它写完,不能再拖了。...函数介绍 - 发送和接收 - (1)send和write: 首先说明的一点,之前介绍的socket这个函数,非常类似我们之前介绍的open函数,他们都会返回一下文件描述符;所以这里的send函数和write...(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将主机字节顺序转化为网络字节顺序,这两个函数先不讲,实战遇到的话,再进行解析),具体可以看下面Linux的源文: inet_aton...(2)struct sockaddr,这个结构体是linux的网络编程接口中用来表示IP地址的 标准结构体,bind、connect等函数中都需要这个结构体,这个结构体是兼容IPV4和IPV6的。
1、服务端 (一)TcpServer.hpp #include #include #include #include socket.h...port_(port), ip_(ip) {} void InitServer() { //IPv4协议,TCP套接字 listensock_ = socket...TcpClient.cpp #include #include #include #include #include socket.h...string serverip = argv[1]; uint16_t serverport = std::stoi(argv[2]); //创建TCP套接字描述符 int sockfd = socket...(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { std::cerr socket error" << std::endl
一、必备接口 1、接收数据 recvfrom函数用于从套接字接收数据 #include socket.h> ssize_t recvfrom(int sockfd, void *buf, size_t...函数返回时,addrlen 会被更新为实际存储在 src_addr 中的地址信息的长度 2、发送数据 sendto函数用于在无连接的套接字(如 UDP 套接字)上发送数据 #include socket.h...设置发送数据的标志,无标志一般设为0,在这里可以设置非阻塞模式 dest_addr:该结构体包含了目标地址的信息 addrlen:表示dest_addr结构体的长度(以字节为单位) 二、实现UDP网络编程...sockfd_ = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd_ < 0) { exit...local)); //将local的前两个字节也就是它的地址族为AF_INET local.sin_family = AF_INET; //保证我们的端口号是网络字节序列
define INET6_ADDRSTRLEN 46 //如果len太小,不足以容纳表达式结果,那么返回一个空指针,并置为errno - sockaddr 数据结构 struct sockaddr :很多网络编程函数的出现早于...---- 网络套接字函数 基于流套接字的网络编程流程: //头文件 #include #includesocket.h> - socket函数 //socket...Linux通过这一值来排列网络队列。 这个值在0到6之间(包括0和6),由option_value指定。赋给sock->sk->sk_priority。...在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可 以设置connect()延时,直到accpet()被呼叫(本函数设置只有在非阻塞的过程中有显著的 作用,...如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR。
这里我们就来介绍一下最基础且通用的Socket通信 socket到底是什么? 上篇文章我们在理解socket时说了,把 IP + Port 叫做**套接字Socket**。...我们说过,Linux下一切皆文件,Socket也是一种特殊的文件类型,我们也可以像操作普通文件一样,通过文件描述符来操作它 具体表现为,当应用程序调用socket()函数时,操作系统内核会: 在内部创建一套数据结构...:操作系统内核实现了复杂的TCP/IP协议栈,用户不能直接操作这些协议栈,所以我们说它是一组API,是应用程序与网络协议栈之间的编程接口。...这么说也没有毛病 在哲学上:我们认为它是一种抽象和解耦,它隐藏了网络协议的所有复杂性,让程序员可以用“打开-读-写-关闭”这种类似文件操作的简单模式来进行网络编程。...那还说啥了,更没毛病了 用一句话来概括,Socket(套接字)是网络通信的端点,是操作系统提供给应用程序的一组编程接口(API),应用程序通过调用这套接口,就可以利用网络协议栈(如TCP/IP)进行网络通信
在socket编程中,这一过程由客户端执行connect来触发(这个下面接口函数会有介绍的)。...在socket编程中,这一过程由客户端或服务端任一方执行close来触发。...: 在讲解这个之前,你得必须要明白在Linux系统下,一切皆是文件,(举个简单的例子,一般我们在Windows系统下,你是可以清楚的看到硬盘盘符,并标有大小的,可以直接用鼠标拖拉文件到里面去;而在Linux...,所以我们把插头插到插座上就能从电网获得电力供给),同样,为了与远程计算机进行传输数据,需要连接到因特网,而编程套接字就是用来连接该网络的工具。...下面我们来看一下在Linux系统下它的原型: BIND(2) Linux Programmer's Manual
server #include #include /* See NOTES */ #include socket.h> #include...unistd.h> #include using namespace std; #define BUFF_LEN 1024 int main(){ int sock=socket...return 0; } client #include #include /* See NOTES */ #include socket.h...string.h> #include using namespace std; #define BUFF_LEN 1024 int main(){ int sock=socket
但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。...使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。...Socket是什么 1、 socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open–> 读写write/read–> 关闭close...注意:其实socket也没有层的概念,它只是一个facade设计模式的应用,让编程变的更简单。是一个软件抽象层。在网络编程中,我们大量用的都是通过socket实现的。...具体如何实现,可以看看linux的内核 1、socket()函数 int socket(int protofamily, int type, int protocol);//返回sockfd sockfd