网络编程
文章平均质量分 92
本专栏记录网络编程的学习笔记,主要是基于 TCP / UDP 套接字编程。
逆风微积分
目前从事Android系统框架层开发工作
展开
-
《网络编程》原始套接字 ---ping程序实现
基于字节流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)不可以访问传输层协议,只是对应用层的报文进行操作,传输层的数据报格式都是由系统提供的协议栈实现,用户只需要填充相应的应用层报文,由系统完成底层报文首部的填充并发送。原始套接字(SOCK_RAW)可以访问位于基层的传输层协议,原始套接字没有端口号。 原始套接字(SOCK_RAW)是一种不同于 SOCK_STREAM、SOCK_DGRAM 的套接字,它实现于系统核心。原始套接字使进程可以读与写 ICMP、IGMP 等原创 2014-12-23 18:08:57 · 5171 阅读 · 4 评论 -
《网络编程》线程
本文章介绍了线程的基本编程的 API 函数,互斥锁、条件变量等同步机制。原创 2014-12-22 08:30:44 · 1903 阅读 · 4 评论 -
《网络编程》带外数据
有些传输层协议具有带外(Out Of Band,OOB)数据的概念,用于迅速通告对端本端所发生的重要事件。因此,带外数据比普通数据(也称为带内数据)有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据或因流量控制而导致发送端的通告窗口大小为 0(即停止发送数据) 。带外数据的传输可以使用一条独立的传输层连接,也可以映射到传输普通数据的连接中。 UDP 没有实现带外数据传输,TCP 也没有真正的带外数据。只不过 TCP 利用其首部中的 紧急指针标志 和 紧急指针原创 2014-12-20 17:24:52 · 2476 阅读 · 0 评论 -
《网络编程》高级 UDP 套接字编程
UDP 是一个无连接、不可靠的数据报协议,任何可靠传输都需由应用程序提供,例如:超时重传、序列号应答机制,但是它在某些场合使用效率高,方便。它支持广播和多播。原创 2014-12-19 14:51:51 · 1850 阅读 · 0 评论 -
《网络编程》广播和多播
在网络协议中 IP 地址有三种方式,即为单播地址、广播地址 以及 多播地址。假设多个主机上的共享信道网络是以太网,每个以太网帧包含源主机和目的主机的以太网地址。若目的地址仅指定单个接收接口,则称为单播,在单播方式下,任意两台主机之间的通信不会干扰网内其他主机。若目的地址包含网上的所有主机的接收接口时,即一个主机要向网上所有主机发送帧,则称为广播。若一个主机把帧发送给属于多播组的多个主机,则称为多播。广播和多播仅应用于 UDP,可以将数据报文同时传给多个接收者,而 TCP 是一个面向连接的字节流协议,意味着只原创 2014-12-18 16:47:43 · 2414 阅读 · 0 评论 -
《网络编程》路由套接字
Unix 系统集成了路由功能,它包含相应的路由数据库可提供的路由信息,用户可以通过命令方式来增加、修改以及删除路由表中的项目,也可以只查看路由表的信息。在创建套接字时,可以通过指定参数 AF_ROUTE 域创建路由套接字,路由套接字可以访问内核中路由子系统的接口信息。原创 2014-12-18 14:47:02 · 2089 阅读 · 0 评论 -
《网络编程》ioctl 操作
ioctl 函数和 fcntl 函数类似,都可用于对描述符的操作,获取或设置已打开描述符的属性,但是两个函数在网络编程相关中操作针对不同了类型,fcntl 函数有套接字操作、文件操作,而 ioctl 函数除了可以操作 fcntl 函数可操作的类型之外,还可以进行接口操作、路由表操作、 ARP 高速缓存操作以及流系统操作。原创 2014-12-17 16:55:17 · 1866 阅读 · 0 评论 -
《网络编程》非阻塞 I/O
非阻塞式的 I/O 是进程调用 I/O 操作时,若数据未准备就绪,则立即返回一个 EWOULDBLOCK 错误,在数据准备就绪之前,应用进程采用轮询的方式检查数据是否准备就绪。直到数据准备就绪,则内核把该数据复制到应用进程的缓冲区,完成数据复制之前进程处于阻塞状态,直到数据复制完成后才返回。即 I/O 操作第一阶段处于轮询检查状态,第二阶段处于阻塞状态。原创 2014-12-17 08:28:28 · 2829 阅读 · 0 评论 -
《网络编程》Unix 域套接字
Unix 域套接字是一种客户端和服务器在单主机上的 IPC 方法。Unix 域套接字不执行协议处理,不需要添加或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套接字的效率更高。Unix 域套接字提供字节流(类似于 TCP)和数据报(类似于 UDP)两种接口,UNIX域数据报服务是可靠的,既不会丢失消息也不会传递出错。UNIX域套接字是套接字和管道之间的混合物。原创 2014-12-16 18:47:59 · 1913 阅读 · 0 评论 -
《网络编程》高级 I/O
本节是套接字的高级 I/O 。为套接字设置超时闹钟,使用更加方便的数据传输函数。套接字的 I/O 操作上设置超时有三种方法:调用 alarm 函数,在它指定超时到期时产生 SIGALRM 信号;在 select 函数中设置超时阻塞等待 I/O,以替代直接阻塞在 read 或write 调用上;使用 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项(这两个选项只是一部分实现原创 2014-12-16 10:56:40 · 1754 阅读 · 0 评论 -
《网络编程》守护进程
守护进程是在后台运行并独立于所有终端控制的进程。守护进程没有控制终端源于它们通常是由系统初始化脚本启动,但是也有可能从某个终端由用户在 shell 提示符下键入命令行启动,这种启动方式的守护进程必须亲自脱离与控制终端的关联,从而避免与作业控制、终端会话管理、终端产生信号等发生任何不期望的交互,也可以避免在后台运行的守护进程非预期地输出到终端。 由于守护进程没有控制终端,当守护进程出错时,必须通过某种输出函数输出错误消息,而不能使用标准输出函数。syslog 函数是输出这些消息的标准方法,它把原创 2014-12-15 21:32:04 · 1768 阅读 · 1 评论 -
《网络编程》IPv4 与 IPv6 相互操作
由于互联网终端不断增加,IPv4 地址长度(32位)已不能够满足要求,所以出现了 IPv6地址(128位),但是现有应用程序大部分还是采用 IPv4 地址形式,所以必须解决 IPv4 与 IPv6 之间的相互操作,使现有基于 IPv4 的应用程序能够与基于 IPv6 的应用程序相互通信。那么我们怎么实现 IPv4 客户端与 IPv6 服务器、IPv6 客户端与 IPv4 服务器之间的通信。原创 2014-12-15 16:54:05 · 3002 阅读 · 0 评论 -
《网络编程》套接字地址与名字转换
在套接字编程中,我们经常使用数字的 IP 地址和端口号进程编程,但是我们平常所熟悉的是一些便于记忆的字符名字,要使这种名字能够为套接字操作函数识别,所以这两者之间必须存在着某种转换关系。本节介绍的是 【主机名 与 地址】 和 【服务名 与 端口号】 之间的转换。在 Unix 系统中,可以使用函数 gethostbyname、gethostbyaddr 实现【主机名 与 地址】之间的转换;可以使用函数 getservbyname、getservbyport 实现 【服务名 与 端口号】 之间的转换。但是前面这原创 2014-12-15 09:04:07 · 1871 阅读 · 0 评论 -
《网络编程》基本 UDP 套接字编程
本节是介绍了基于 UDP 套接字的编程。原创 2014-12-14 19:21:24 · 2708 阅读 · 0 评论 -
《网络编程》I/O 多路复用
在前面的文章中介绍了五种 I/O 模型《I/O 模型》,这里介绍 I/O 模型中 I/O 多路复用在 TCP 套接字编程中的使用。在 I/O 多路复用中主要是 select 和 poll 函数的使用。select 函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并只在一个或多个事件发生或超过指定时间后才被唤醒。进程调用 select 函数是告知内核,进程对哪些描述原创 2014-12-13 17:12:25 · 2930 阅读 · 0 评论 -
《网络编程》I/O 模型
在分析 I/O 模型之前,首先了解 同步 I/O 和 异步 I/O 的基本概念:同步 I/O:进程调用 I/O 操作函数时,在 I/O 操作函数返回之前,该进程会被挂起(即阻塞),直到 I/O 操作完成后返回;异步 I/O:进程调用 I/O 操作函数时,在 I/O 操作函数返回之前,该进程不会被挂起(即不阻塞),当 I/O 操作完成后会通知方式告知进程;在 Unix 系统中主要有 5 种 I/O 模型:阻塞式 I/O;非阻塞式 I/O;I/O 多路复用;信号驱动式 I/O;异步 I/O;一般一个输入原创 2014-12-13 12:15:35 · 3681 阅读 · 0 评论 -
《网络编程》基于 TCP 套接字编程的分析
本节围绕着基于 TCP 套接字编程实现的客户端和服务器进行分析,首先给出一个简单的客户端和服务器模式的基于 TCP 套接字的编程实现,然后针对实现过程中所出现的问题逐步解决。有关基于 TCP 套接字的编程过程可参考文章《基本 TCP 套接字编程》。该编程实现的功能如下:(1)客户端从标准输入读取文本,并发送给服务器;(2)服务器从网络输入读取该文本,并回射给客户端;(3)客户端从网络读取由服务器回射的文本,并通过标准输出回显到终端;原创 2014-12-12 20:38:09 · 2124 阅读 · 0 评论 -
《网络编程》基本 TCP 套接字编程
基于 TCP 的套接字编程的所有客户端和服务器端都是从调用 socket 开始,它返回一个套接字描述符。客户端随后调用 connect 函数,服务器端则调用 bind、listen 和 accept 函数。套接字通常使用标准的 close 函数关闭,但是也可以使用 shutdown 函数关闭套接字。下面针对套接字编程实现过程中所调用的函数进程分析原创 2014-12-10 18:59:10 · 2841 阅读 · 2 评论 -
《网络编程》套接字编程简介
本节介绍的套接字是可以实现不同计算机之间的远程进程间通信。套接口是网络进程的 ID,在网络中每一个节点都有一个网络地址,也就是 IP 地址,两个进程间通信时,首先要确定各自所在网络节点的网络地址。但是,网络地址只要确定进程所在的计算机,由于一台计算机上同时可能有多个网络进程,所以仅凭网络地址还不能确定是网络中的哪一个进程,因此套接口中还需要其他信息,也就是端口。在一台计算机中,一个端口号只能分配给一个进程,所以,进程和端口之间是一一对应的关系。因此,使用端口号和网络地址的组合就能唯一地确定整个网络中的一个网原创 2014-12-10 10:42:34 · 2098 阅读 · 0 评论