首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏我的博客

    Linux网络】Socket编程:TCP网络编程

    在前面的文章中,我们使用了UDP进行网络编程,这篇文章我们就来使用另一个TCP进行网络编程,我们知道UDP和TCP都是传输层协议,但是特点不同,前者无连接,不可靠传输,面向数据报,后者有连接,可靠传输 大体框架 1.1 补充 首先,在之前的UDP网络编程中,我们是直接使用的硬编码,例如退出码直接就设为1、2、3等,显然这并不是一个很好的选择,那么这里我们可以统一设计一个服务器的退出码,就像之前设计日志等级一样 (网卡)发来的连接我们都愿意接受,所以我们地址结构中的成员 sin_addr 需要设置为 INADDR_ANY,也就是IP地址此时为0,这在UDP网络编程时我们已经详细介绍了原因,这意味着我们服务端在使用 直接向目标服务器发起建立连接的请求 return 0; } 我们这里也不需要显式bind,关于原因我们在udp网络编程时已经说明了,那我们应该做什么呢? ,上层服务我们可以和UDP网络编程一样,直接在服务端主程序调用其他的服务,就比如之前实现的翻译和路由转发,然后在服务端接收数据时,将数据回调处理,最后将结果写回客户端。

    21110编辑于 2025-12-22
  • 来自专栏Android开发指南

    4.网络编程

    HTTP网络编程 网络接口文档 用来描述客户端和服务端的数据交互 Http的格式规范 请求部分 请求消息行:定义请求类型,请求的地址,http的版本号 请求消息头:定义请求的消息头 请求消息内容实体:消息的内容实体 : zh-CN,zh;q=0.8 Cookie: BAIDUID=BECE0B98C5D5A8EA4C5A93221901CC58:FG=1; BAIDUPSID=BECE0B98C5D5A8EA4C5A93221901CC58 ; BDUSS=l1MmM3MEVEclRYR1RZc1ZJTnBDb2RBUTY1YktTUFc0a2pBYVlHNkxOZDk4N0JVQVFBQUFBJCQAAAAAAAAAAAEAAABoRLMjd2FuZ2Rha2U4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1miVR9ZolUVm 因此在主线程中调用异步任务时需要设置回调 开发过程中UI控制层访问网络最关心的是什么 UI控制层访问网络的目的是为了获得网络返回数据,UI层最关心返回的数据结果;在java开发中,一切皆有面向对象的思想 如何为UI控制层封装好网络请求 异步 + 回调 + 接口文档规范 http 后台任务 后台任务是处理 及时性不高的任务,不需要耗用太多资源去做网络请求,UI也不是很关心数据返回 通常应用程序只会给到一个线程去处理所有的后台任务

    748100发布于 2018-05-14
  • 来自专栏Android开发指南

    4.网络编程

    HTTP网络编程 网络接口文档 用来描述客户端和服务端的数据交互 Http的格式规范 请求部分 请求消息行:定义请求类型,请求的地址,http的版本号 请求消息头:定义请求的消息头 请求消息内容实体:消息的内容实体 : zh-CN,zh;q=0.8 Cookie: BAIDUID=BECE0B98C5D5A8EA4C5A93221901CC58:FG=1; BAIDUPSID=BECE0B98C5D5A8EA4C5A93221901CC58 ; BDUSS=l1MmM3MEVEclRYR1RZc1ZJTnBDb2RBUTY1YktTUFc0a2pBYVlHNkxOZDk4N0JVQVFBQUFBJCQAAAAAAAAAAAEAAABoRLMjd2FuZ2Rha2U4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1miVR9ZolUVm 因此在主线程中调用异步任务时需要设置回调 开发过程中UI控制层访问网络最关心的是什么 UI控制层访问网络的目的是为了获得网络返回数据,UI层最关心返回的数据结果;在java开发中,一切皆有面向对象的思想 如何为UI控制层封装好网络请求 异步 + 回调 + 接口文档规范 http 后台任务 后台任务是处理 及时性不高的任务,不需要耗用太多资源去做网络请求,UI也不是很关心数据返回 通常应用程序只会给到一个线程去处理所有的后台任务

    47310编辑于 2022-01-12
  • 来自专栏开源519

    网络编程 - Linux Socket编程

    Linux Socket编程 ---- 目录 前言 Socket的功能 Socket基础 Socket类型 基本结构 基本转换函数 基本Socket使用 TCP Socket实例 UDP Socket实例 疑难问题记录 总结 ---- 前言   socket(套接字)是网络编程编程的一种技巧。 本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。 gethostbyaddr()函数 —— 通过一个IPv4的地址来获取主机信息。 getprotobyname()函数 —— 获得网络协议名。 网络编程非常有趣,能够实现天南海北之间的通讯,让远距离的人与人、人与物或者物与物之间产生联系,很有意思! 最后 用心感悟,认真记录,写好每一篇文章,分享每一框干货。

    11K50编辑于 2023-03-09
  • 来自专栏南桥谈编程

    Linux网络编程网络基础 | Socket 编程基础

    之前我们在学习系统编程的时候知道访问公共资源就是临界资源,那么这里的局域网就是一个临界资源(以太网中, 任何时刻, 只允许一台机器向网络中发送数据)。 数据包封装和分用 数据封装的过程: 数据分用的过程: 跨网络传输流程图 IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址,对于 IPv4 来说, IP 地址是一个 4 字节, 32 : IP 网络层存在的意义: 提供网络虚拟层, 让世界的所有网络都是 IP 网络, 屏蔽 最底层网络的差异 Socket 编程预备 理解源 IP 地址和目的 IP 地址 IP在网络中是用来标识主机的唯一性 sockadder结构 socket API 是一层抽象的网络编程接口,适用于各种底层网络协议,如 IPv4、 IPv6,以及 后面要讲的 UNIX Domain Socket. 关于Socket套接字编程后续文章会详细讲解。

    53010编辑于 2024-10-14
  • 来自专栏全栈程序员必看

    linux socket udp编程_linux网络编程socket

    文章目录 前言 一、UDP是什么 二、UDP 数据报服务特点 二、UDP 编程流程 1.服务器 2.客户端 3.输出结果 总结 前言 浅谈UDP。 二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd

    11.9K20编辑于 2022-10-04
  • 来自专栏changxin7

    4.网络编程 总结

    缺点: 功能单一,没有个性化设置,响应速度相对慢一些. 2.网络通信原理 80年代,固定电话联系,(还没有推广普通话) 1. 两台电话之间一堆物理连接介质连接. 2. 拨号,锁定对方电话的位置. 你必须知道对方的mac地址你才可以以广播的形式发消息.实际上,网络通信中,你只要知道对方的IP与自己的IP即可. 缓冲区存在如果你的网络波动,保证数据的收发稳定,匀速. 获取bytes形式的报头的总字节数 len_head_dic_json_bytes = len(head_dic_json_bytes) 5.将不固定的int总字节数编程固定长度的 形式的报头的总字节数 four_head_bytes = struct.pack('i', len_head_dic_json_bytes) # 5 将不固定的int总字节数编程固定长度的

    1.3K20发布于 2019-08-20
  • 来自专栏学习笔记

    Linux网络编程(一)

    为什么网络字节序采用的是大端?而不是小端? 网络字节序采用的是大端,而主机字节序一般采用的是小端,那为什么网络字节序不采用小端呢? socket编程接口 socket常见接口: 创建套接字:(TCP/UDP,客户端+服务器) int socket(int domain, int type, int protocol); 绑定端口号 IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位地址类型,16位端口号和32位IP地址。 IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6。 socket API可以都用struct sockaddr*类型表示,在使用的时候需要强制转化成sockaddr_in;这样的好处是程序的通用性,可以接收IPv4、IPv6,以及UNIX Domain

    39810编辑于 2025-05-29
  • 来自专栏编程学习基地

    Linux网络编程TCP

    TCP/IP协议 TCP/IP 协议栈是一系列网络协议(protocol)的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。 OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的 Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。 TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。 sin_port; /*网络字节序表示的端口号*/ struct in_addr sin_addr; /*ipv4地址*/ } /* Internet address. */ struct in_addr

    6.5K30发布于 2021-11-16
  • 来自专栏用户2442861的专栏

    Linux网络编程书籍

    《计算机网络系统方法(原书第4版)》 作  者: (美)彼得森(Peterson,L.L.) 详解的作者还写了另外2本经典著作,《Unix环境高级编程》,《Unix网络编程》二卷本。 说明:搞Linux网络编程的,想学TCP/IP的一定要看大师W.Richard Stevens这六本书,基本上六本书看完基础也就搭好了。 ? ? ? ? ? ? 网络体系结构:linux内核中网络协议的设计与实现》 ? 一本在kernel实现网络功能的基础书籍,最好还是看英文版的,翻译的实在太烂了。有条件的还是看原版吧,没办法啊,中国的此类书籍基本上落后老美3-4年。结合linux源代码分析一书收获更多。

    4.3K30发布于 2018-09-14
  • 来自专栏我的博客

    Linux网络】Socket编程:UDP网络编程实现ChatServer

    上篇文章我们实现了英译汉的网络字典,客服端向服务端发送英文,服务端接收数据后回调处理,将翻译后的中文再转发给客户端,这其实和EchoSever一样都是一对一的网络通信。 local.sin_port = htons(_port); local.sin_addr.s_addr = INADDR_ANY; // 绑定IPv4地址结构 route.MessageRoute(sockfs, message, client); }); usvr->Init(); usvr->Start(); return 0; } 4. const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 参数说明 af:地址族,如 AF_INET (IPv4) Presentation to Network) int inet_pton(int af, const char *src, void *dst); 参数 af:地址族 - AF_INET (IPv4)

    17210编辑于 2025-12-22
  • 来自专栏我的博客

    Linux网络】Socket编程:UDP网络编程实现DictServer

    网络通信部分 首先我们网络通信不需要改变,只需要稍微修改添加一些新的变量,服务端在接收客户端发来的数据,然后回调去处理翻译这个动作,所以我们可以使用包装器function来包装一个函数指针,用于回调处理翻译 local.sin_addr.s_addr = inet_addr(_ip.c_str()); // TODO local.sin_addr.s_addr = INADDR_ANY; // 绑定IPv4地址结构 Udpserver.cc 服务端主程序已经有网络通信的功能了,我们现在只需要实例化字典对象,先加载字典到哈希表中,再在网络通信时进行翻译 代码如下: #include <memory> #include Enable_Console_Log_Strategy(); // 字典对象提供翻译功能 Dict dict; dict.LoadDict(); // 网络服务器对象提供网络通信功能 buffer[m] = 0; std::cout << buffer << std::endl; } } return 0; } 运行测试一下: 4.

    14910编辑于 2025-12-22
  • 【嵌入式Linux应用开发基础】网络编程(4):UDP协议

    中的编程实现 在嵌入式Linux应用开发中,可以使用socket编程接口来实现UDP协议的数据传输。 具体步骤如下: 创建socket:使用socket()函数创建一个新的socket,指定使用的地址类型和协议(如PF_INET和SOCK_DGRAM表示使用IPv4和UDP协议)。 缺乏拥塞控制:UDP 协议没有拥塞控制机制,当网络拥塞时,可能会导致大量数据包丢失,影响网络性能。 九、嵌入式开发注意事项 9.1. ,开发者可以在嵌入式Linux系统中实现高效的网络通信,特别适合需要快速响应、可接受少量数据丢失的物联网应用场景。 Linux 网络编程 - UDP 协议详解:该博客对 UDP 协议在 Linux 环境下的特点、首部格式、校验和计算等方面进行了详细的讲解,并对比了 UDP 和 TCP 协议的优劣,同时给出了一些 UDP

    34210编辑于 2026-01-21
  • 来自专栏C/C++进阶专栏

    Linux网络编程——UDP组播编程

    一,基础概念 数据报文在网络中的点对点传输方式通常有以下三种: 单播(Unicast): 数据报文从一个发送端到一个接收端的通信方式。 组播的实现需要设置组播地址 在IPv4中组播的地址范围是:224.0.0.0到239.255.255.255。 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('', MCAST_PORT)) mreq = struct.pack("4sl designs-examples-using-multicasting-af-inet https://os.mbed.com/handbook/Socket https://subingwen.cn/linux

    6.1K40编辑于 2023-09-04
  • 来自专栏我的博客

    Linux网络】Socket编程:UDP网络编程实现Echo Server

    在上篇文章中,我们已经铺垫了一些前置知识,这一篇文章我们就来实现UDP网络编程,实现一个Echo Server,就是客户端给服务端发送一条消息,服务端接收后,再转发给客户端,回显出来 1. :操作系统内核实现了复杂的TCP/IP协议栈,用户不能直接操作这些协议栈,所以我们说它是一组API,是应用程序与网络协议栈之间的编程接口。 这么说也没有毛病 在哲学上:我们认为它是一种抽象和解耦,它隐藏了网络协议的所有复杂性,让程序员可以用“打开-读-写-关闭”这种类似文件操作的简单模式来进行网络编程。 那还说啥了,更没毛病了 用一句话来概括,Socket(套接字)是网络通信的端点,是操作系统提供给应用程序的一组编程接口(API),应用程序通过调用这套接口,就可以利用网络协议栈(如TCP/IP)进行网络通信 关于网络字节序在上篇文章中做过介绍 sin_addr: 作用:存储IPv4地址。

    22710编辑于 2025-12-22
  • Linux网络编程网络层IP协议

    IP协议的协议头格式 4位版本号 :指定IP协议的版本,对于IPv4,版本号就是44位首部长度:表名IP协议报头的长度,单位是4字节,所以IP协议报头的最大长度是15*4=60字节。 8位服务类型:3 位优先权字段(已经弃用),,4 位 TOS 字段, 和1 位保留字段(必须置为 0)。 4 位 TOS 分别表示:最小延时,,最大吞吐量, 最高可靠性,最小成本。 网段划分 IP地址分为两部分:网络号和主机号 网络号: 保证相互连接的两个网段具有不同的标识; 主机号: 同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号; 不同的子网其实就是把网络号相同的主机放到一起 *的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1; IP地址的数量限制 我们知道,IP 地址(IPv4)是一个 4 字节 32 位的正整数。 ; IPv6:IPv6 并不是 IPv4 的简单升级版。

    18410编辑于 2025-12-30
  • Linux网络编程网络基础概念(下)

    Linux系统中,我们可以通过ifconfig命令来查看自己机器的MAC地址: ether后面就是mac地址。 IP地址是在IP协议中,用来标识网络中不同主机的地址。 对于IPv4来说,IP地址是一个4字节,32位的整数。 IP层的引入屏蔽了底层网络差异(如以太网、Wi-Fi、光纤),通过逻辑化的IP地址实现全球路由,让不同技术的网络能无缝互联。 二、socket编程预备 IP在网络中,用来标识一个主机的唯一性。 我们之前在学习系统编程的时候, 学习了 pid 表示唯一一个进程 ; 此处我们的端口号也是唯一表示一个进程. 那么这两者之间是怎样的关系 ? 2.4、sockaddr 结构 socket API 是一层抽象的网络编程接口 , 适用于各种底层网络协议 , 如 IPv4 、 IPv6, 以及后面要讲的 UNIX Domain Socket.

    25210编辑于 2025-10-22
  • 来自专栏各类技术文章~

    Linux网络编程基础API

    好在Linux内核检测到TCP紧急标志时,将通知应用程序有带外数据需要接收。内核通知应用程序带外数据到达的两种常见方式是: 1O复用产生的异常事件和SIGURG信号。 对这种情况,Linux给开发人员提供的解决方案是:对监听socket设置这些socket选项,那么accept返回的连接socket将自动继承这些选项。 网络信息API 利用域名获取IP地址 IP地址比域名发生变更的概率要高,所以利用IP地址编写程序并非上策。 若是 IPV4 ,则此变量中存有 AF_INET。 h_length:保存IP地址长度。若是 IPV4 地址,因为是 4 个字节,则保存4;IPV6 时,因为是 16 个字节,故保存16。 addrinfo结构体中,ai_ protocol 成员是指具体的网络协议,其含义和socket系统调用的第三个参数相同,它通常被设置为0。ai_fags 成员可以取表中的标志的按位或。

    1.9K20编辑于 2021-12-15
  • 来自专栏乐意学点小编程

    Linux】socket网络编程基础

    一、IP地址 1、概念 IP地址是在IP协议中,用来标识网络中不同主机的地址,它有两个版本,一个是IPv4,一个是IPv6,IPv4是一个32位4字节的数字,通常使用点分十进制的字符串表示IP地址,例如 192.168.1.1,IPv6是一个108位16字节的数字,一般来说,现在在世界上使用规模最大的就是IPv4,但是因为4字节能表示的数字只有不到43亿,随着时代的进步,入网设备从电脑和手机逐渐变成了除了它们以外其他的例如空调 网络层主要负责将数据包从源主机传输到目标主机,进行路由选择和寻址,该层的常见协议有: 网际协议(IP):是 TCP/IP 协议族的核心协议之一,分为 IPv4 和 IPv6 两个版本,IPv4 而不仅仅是下载邮件到本地 域名系统(DNS):用于将域名解析为对应的 IP 地址,当用户在浏览器中输入域名时,DNS 服务器会将域名转换为对应的 IP 地址,以便浏览器能够找到对应的 Web 服务器 七、socket编程基础 socket(int domain, int type, int protocol); 返回值:成功返回套接字描述符sockfd,失败返回-1 domain:指定通信域 通信域 意义 AF_INET IPv4网络协议

    61410编辑于 2025-05-28
  • 来自专栏后台技术杂项笔记

    Linux网络编程API(二)

    相关API笔记(二) Linux网络编程高级I/O函数 1. pipe pipe函数用于创建一个管道,实现进程间通信 #include <unistd.h> //成功返回0,失败返回-1并设置errno file_descriptor_two); 参数: dup和dup2的参数都是文件描述符,具体作用如下: dup函数创建一个新的文件描述符,该新的描述符和原有文件描述符file_descriptor指向相同文件,管道或者网络连接 count: 指定在文件描述符in_fd和out_fd之间传输的字节数 4. mmap和munmap mmap用于申请一段内存空间,这段内存可以作为进程间通信的共享内存,可以将文件直接映射到其中。

    1.3K10编辑于 2022-09-26
领券