
linux 网络编程
文章平均质量分 88
li_wen01
liwen01
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
unix domain 与本地本地回环在进程间通信中的差异
前言: 127.0.0.1它是一个私有IP,代表的就是你的本机环回地址,其实本质上是绑定在虚拟网卡(loopback)上的IP。在实际应用中,有遇到在使用本地回环做进程间通讯的时候程序阻塞的情况。比如下面代码(一)本地回环: 客户端数据收发程序:static int send_recv(char *cmd, int *ret, char* strResult, int nSize){ struct sockaddr_in sin; struct sockaddr_in cin; int原创 2021-03-31 15:02:01 · 1711 阅读 · 0 评论 -
深入理解UDP协议
UDP的疑难杂症UDP的传输方式:面向报文面向报文的传输方式决定了 UDP 的数据发送方式是一份一份的,也就是应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。那么UDP的报文大小由哪些影响因素呢? UDP 数据包的理论长度是多少,合适的 UDP 数据包应该是多少呢?(1) UDP 报文大小的影响因素,主要有以下3个:[1] UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536; [2] 以太网(Ethernet)数据帧转载 2021-03-31 11:28:12 · 1329 阅读 · 0 评论 -
TCP/IP网络协议详解
一、 计算机网络体系结构分层一图看完本文计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。二、 TCP/IP 基础2.1 TCP/IP 的具体含义从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 I.转载 2021-03-30 18:59:52 · 13041 阅读 · 1 评论 -
网卡介绍——MAC与PHY的关系分析
(一)网卡初步认识网络适配器又称网卡或网络接口卡(NIC),英文名Network Interface Card.它是使计算机联网的设备.平常所说的网卡就是将PC机和LAN连接的网络适配器.网卡(NIC) 插在计算机主板插槽中,负责将用户要传递的数据转换为网络上其它设备能够识别的格式,通过网络介质传输.数据在计算机总线中传输是并行方式即数据是肩并肩传输的,而在网络的物理缆线中说数据以串行的比特流方式传输的,网卡承担串行数据和并行数据间的转换.网卡在发送数据前要同接收网卡进行对话以确定最大可发送数据的大..转载 2020-05-14 14:38:55 · 13192 阅读 · 1 评论 -
linux网络编程学习笔记(6)——TCP连接状态的多种判断方法
在TCP网络编程模型中,无论是客户端还是服务端,在网络编程的过程中都需要判断连接的对方网络状态是否正常。在linux系统中,有很多种方式可以判断连接的对方网络是否已经断开。通过错误码和信号判断 通过select系统函数判断 通过TCP_INFO套接字选项判断 通过SO_KEEPALIVE套接字选项判断 通过SO_RCVTIMEO/SO_SNDTIMEO判断(一)通过错误码和信............原创 2020-01-10 14:06:01 · 8975 阅读 · 4 评论 -
linux网络编程学习笔记(5)——数据收发和IO操作
linu提供如下IO接口:read和write--最简单的读写函数 readn和writen--原子性读写操作 recvfrom和sendto--增加了目标地址和地址结构长度的参数 recv和send--允许从进程到内核传递标志 readv和writev--允许指定往其中输入数据或从其中输出数据的缓冲区 recvmsg和sendmsg.........转载 2020-01-07 23:42:04 · 752 阅读 · 0 评论 -
linux网络编程学习笔记(4)——udp编程及udp常见问题处理
UDP协议是User Datagram Protocol的缩写,它是无连接,不可靠的网络协议。一般使用它进行实时性数据的传输,主要是因为它快,但因为它是不可靠的一种传输协议,所以不可避免的会出现丢包现象。本文就具体讨论导致UDP传输数据包丢失的原因以及一些基本的规避方法:路由器转发造成的数据包丢失 数据链路层MTU造成的数据包丢失 缺少滑动窗口导致的数据包丢失 收发缓存区大小造成.........原创 2019-10-24 22:17:42 · 1567 阅读 · 1 评论 -
linux网络编程学习笔记(3)——套接字选项编程
在进行网络编程的时候,经常需要査看或者设置套接字的某些特性,例如设置地址复用、读写数据的超时时间、对读缓冲区的大小进行调整等操作。获得套接字选项设置情况 的函数是getsockopt(),设置套接字选项的函数为setsockopt()。功能描述: 获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选......原创 2020-01-07 23:41:31 · 1777 阅读 · 1 评论 -
linux网络编程学习笔记(2)——进程与线程实现机制
(一)进程定义OS系统从只能跑一个程序到能跑多个。进程可以描述程序的执行过程。进程:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。只有当一个程序被OS加载到内存中,cpu对其执行时,这个过程是动态的,称为进程。(二)进程的组成包含了正在运行的一个程序的所有状态信息程序的代码 程序处理的数据 要知道现在执行哪条指令,程序计数器中的值指示将运行的指令。 CPU.........转载 2020-01-07 23:41:47 · 730 阅读 · 0 评论 -
linux网络编程学习笔记(1)——文件系统及文件编程
前言: 在UNIX族的操作系统中,文件系统占有十分重要的地位,文件的概念测盖了UNIX设备和操作对象的全部内容,对设备的操作方式几乎可以与对普通文件的操作等价。本章对文件系统进行简单的介绍,主要包括如下内容:UNIX下文件的内涵: Linux下的文件系统布局,文件系统的树形结构: Linux下的普通文件和设备文件; Linux下虚拟文件系统的含义 对文件的常用操作方法,文件句.........原创 2018-12-03 22:26:02 · 929 阅读 · 1 评论 -
一种基于linux系统的精准流量统计方法
前言: 在linux系统关于流量统计,已经有开源的工具,比如nethogs,nload和iptraf。它们适合我们在PC上直接监控某台设备的流量情况,但并不适合我们应用到自己的程序中去。如果要在自己代码中实现流量的统计,可以有下面几种方法:统计应用层流量;使用tcpdump抓取每一包数据进行统计;使用Iptables命令来实现。下面就这几种方法进行对比:(1)应用层计算流量 ............原创 2019-06-25 10:53:50 · 11237 阅读 · 10 评论 -
一种基于Unix Domain和TCP连接的跨设备多进程间通信的方法
前言: 在linux系统进程间通信的方式有消息,消息队列,管道,内存映射,套接字等多种方式。在Android系统上进行进程间通信主要是使用Binder,其它的还有共享内存,管道,RPC和Unix Domain等方式。但是,在linux中常用的消息队列,在Android等系统上并不能直接的使用,Android上常用的Binder,在其他的系统上同样不能使用,如果要在windows,linux.........原创 2019-08-15 14:14:24 · 2566 阅读 · 4 评论 -
iptables实现网络数据转发和网络数据共享功能
iptables在维基百科上的解释是:ptables是一个配置Linux内核防火墙的命令行工具,是netfilter项目的一部分,可以检测、修改、转发、重定向和丢弃IPv4数据包。ip6tables用于ipv6。我这里介绍的是在linux平台实现网络数据的转发和网络数据共享的功能。 整体结构和测试环境如下图所示。电脑/终端: win7 系统,一个网卡eth0,通过.........原创 2019-01-31 14:39:07 · 10922 阅读 · 1 评论 -
TCP与UDP的区别以及UDP程序设计中的几个问题
TCP与UDP基本区别 1.基于连接与无连接2.TCP要求系统资源较多,UDP较少;3.UDP程序结构较简单4.流模式(TCP)与数据报模式(UDP);5.TCP保证数据正确性,UDP可能丢包6.TCP保证数据顺序,UDP不保证UDP应用场景: 1.面向数据报方式2.网络数据大多为短消息3.拥有大量Client4.对数据安...原创 2018-04-24 11:01:42 · 814 阅读 · 1 评论 -
linux 网络编程:使用两线程实现socket同时收发数据
工作中最近有使用到socket 向客户端同时发送和接收数据,因为是嵌入式linux设备,且要求只能同时一个客户端连接该端口。考虑到节省系统资源,只创建了两个线程分别实现服务端的收发数据。下面直接上代码,该代码为在PC机上程序,已作详细注释。server.c#include#include#include#include#include#include#include#incl...原创 2016-09-26 00:51:21 · 19692 阅读 · 1 评论 -
Unix域协议编程:任意进程间描述符的传递
Unix域套接字可以用于在同一个主机上的不同进程之间传递描述符,它可以视为IPC方法之一。它可以在进程间传递的描述符不限类型,这就是我们称之为“描述符传递”,而不是“文件描述符传递”。描述符是通过辅助数据发送的(结构体 msghdr 的 msg_control 成员),在发送和接收描述符时,总是发送至少 1 个字节的数据,即使这个数据没有任何实际意义。否则当接收返回 0 时,接收方将不能区...原创 2018-04-24 11:08:11 · 907 阅读 · 1 评论 -
linux网络编程:使用进程池实现TCP多客户服务
进程池服务:让服务器在启动的某个阶段创建一个进程池,每个客户请求由当前可用子进程池中的某个(闲置)子进程处理。使用进程池的优点在于可以节省fork的开销直接就能处理新到的客户。缺点就是父进程必须父进程必须在服务器启动阶段猜测需要预先派生多少子进程。如果某个时刻客户数恰好等于子子进程总数,那么新到的客户将会被忽略,直到有一个子进程可以被重新使用。如果启动的时候创建过多的子进程,那么就会出现进...原创 2018-04-24 11:02:24 · 750 阅读 · 1 评论 -
linux网络编程:设置非阻塞socket收发数据
非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接。包括的函数有:read, readv, recv, recvfrom, recvmsg, write, writev, send, sendto, sendmsg, accept。 将socket 设置为非阻塞模式有三总方法: (1)创建socket的时候,指定socket是异步的,在ty...原创 2018-04-24 11:02:18 · 16450 阅读 · 0 评论 -
linux网络编程:使用多进程实现socket同时收发数据
前面已讲过使用一个进程实现服务端和客户端P2P通信的实例,但是它只能同时处理一个客户端的连接。如果要实现并发处理多个客户端的连接并且实现P2P通信,可以使用多进程来处理。相比与多线程来说,多进程耗费的系统资源是比较多的,后续会介绍使用线程池实现简单的数据收发。 使用多进程并发处理多个client请求以及实现P2P通信,父进程专门监听端口,每监听到一个连接就创建一个子进程处理这个客户端,于...原创 2016-09-27 23:58:27 · 6786 阅读 · 0 评论 -
Linux网络编程:使用select函数实现socket 收发数据
所谓的回射是指:客户端A向服务端B发送数据,服务端B接收到数据之后,再将接收到的数据发送回客户端B。所谓的迭代服务器,是指服务器端只用一个进程处理或线程处理所有客户端的请求。与之对应的是并发服务器,并发服务器是指对于每一一个客户端的请求,服务端都分配一个进程或是线程独立来处理客户端的处理。下面介绍使用select函数实现TCP回射迭代服务。直接上代码:服务端程序:/*===========...原创 2018-04-24 11:07:52 · 15450 阅读 · 1 评论 -
一个进程中同时使用UDP和TCP传输数据
UDP是无连接的传输,在传输的过程中数据报可能会出现丢失,但是UDP传输又适合那些实时性要求比较高的周期性发送数据的情况。比如客户端周期发送固定长度的脉冲信号给服务器,偶尔丢失一两包数据也不会造成很大的问题,在这种时候是可以使用UDP传输的。有时,客户端也需要发送控制命令给服务端,但是控制不能丢失,这时就需要使用TCP协议来传输了。下面的这个示例代码是在一个进程中同时使用TCP和UDP来传...原创 2018-04-24 11:08:03 · 10626 阅读 · 2 评论 -
linux网络编程:广播编程
概述在生活中广播无处不在,像平时在大街上卖物品的商人,在进行推广产品的时候往往都是使用一个喇叭来进行吆喝:“十块钱买不了吃亏,十块钱买不了上当,走过路过千万不要错过”,这就是广播。那么在网络中的广播又是什么样子的呢?网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。如下图的 1 号主机广播给 2、3、4、5转载 2017-04-11 17:39:48 · 1023 阅读 · 0 评论 -
linux网络编程:多播(组播)编程
什么是多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。 多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进...原创 2018-04-24 11:12:36 · 7846 阅读 · 3 评论