UNIX网络编程卷1
五癫
武汉理工大学软件工程
展开
-
UNIX网络编程卷1:套接字联网API-第一部分:下载unpv13e编译运行
1.源码环境和地址我采用的是ubuntu14.04 64位系统下载地址:http://pan.baidu.com/s/1i44Szzv或者安装wget,然后切到~/Downloads/下运行 wget http://www.unpbook.com/unpv13e.tar.gz (推荐wget这个工具,很好用)2.解压和查看目录结构cd ~/Downloads原创 2017-06-30 14:10:11 · 3633 阅读 · 2 评论 -
UNIX网络编程卷1:应用进程写数据到一个TCP套接字中发生的事情
1.每一个TCP套接字都有一个发送缓冲区,可以使用SO_SNDBUF套接字选项来更改该缓冲区,当使用netstat查看时可以看到Send-Q即是一个tcp套接字的发送缓冲区,采取队列结构2.当某个应用进程调用write,内核从该进程的缓冲区复制所有数据到所写套接字的发送缓冲区。此时从用户态(用户进程调用write)切换到内核态(write执行过程,数据在缓冲区之间的原创 2017-07-04 09:41:57 · 446 阅读 · 0 评论 -
unix网络编程-I/O模型
这个内容非常重要,今后我们将要讨论的各种并发服务器模型都是基于一种或多种I/O模型之上的,网络服务器的性能差异很大程度上就是因为选择了不同I/O模型Unix下可用的5种I/O模型阻塞式I/O模型最流行的是这种模型。目前为止的例子都使用该模型。默认情况下,套接字都是该模型。 使用UDP为例(TCP复杂,还涉及套接字低水平标记等)是因为它简单:数据报要么收原创 2017-09-01 11:17:42 · 272 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网API-第一部分:简介
在学习网络编程的时候,特别是对偏C系的同学来说,网络编程卷1/卷2和高级环境编程都是必修课。本系列博客从简介开始,对课本重要部分,结合自己的理解一一解读,并对自己在学习的过程中碰到的问题进行一一记录。 1.在学习软件编程的时候,我们第一步是先学会一门语言,然后实现一个小模块(封装成类,函数等),来完成某个具体功能或解决某个具体问题。然后在参与真正项目的时候,往往涉及到大量的封装,模块与模块之间原创 2017-06-29 11:06:41 · 506 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网-第4章:基本TCP套接字编程1
还是那句话,我们要学会使用man查看1.socket函数 根据指定的协议族、套接字类型和协议来分配一个套接口的描述符及其所用的资源,返回分配的套接字描述符 #include /* See NOTES */ #include int socket(int domain, int type, int protocol);此处需要重点理解socket每原创 2017-07-07 19:50:29 · 505 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网-第16章:非阻塞式I/O
1.可能阻塞的4类套接字调用: 1)输入操作,包括read,readv,recv,recvfrom,recvmsg。对于非阻塞的套接字,如果输入操作不能被满足(对于TCP套接字即至少有一个字节的数据可读,对于UDP套接字即有一个完整的数据报可读),相应调用将立即返回一个EWOULDBLOCK错误。 2)输出操作,包括write、writev、send、sendto和sen原创 2017-07-20 10:24:22 · 546 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网-第3章:套接字编程-常用函数
1.字节排序2.字节操纵3.地址转换4.读写函数原创 2017-07-06 12:07:48 · 401 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网-第3章:套接字编程-readn,writen函数
既然我们已经有了系统提供的接口read和write,为什么还需要readn writen 和readline呢? 因为字节流套接字上调用read或write输入和输出的字节数可能比请求的数量少,然而这不是出错状态(在我的另一篇博文:点击此处 已经指出),为了预防万一,不让实现返回一个不足的字节计数值,unix网络编程作者就封装了以下函数在/unpv13e/lib 下unp.h中有如下申原创 2017-07-06 11:53:03 · 411 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网-第5章:TCP客户/服务器程序示例
1. 简单回射客户/服务器图解2.代码实例以下程序摘自UNIX网络编程,我会对其加上一些注解,方便阅读TCP回射服务器程序:main函数/*怎么编译运行可以查看我的另一篇博文:unpv13e编译和运行/* tcpserv01.c */ #include #include #include #include #include #include原创 2017-07-13 18:11:39 · 471 阅读 · 0 评论 -
UNIX编程专题-wait和waitpid详解
1.wait和waitpid函数2.什么时候使用3程序实例转载 2017-07-14 10:28:32 · 428 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网API-第2章:传输层 TCP/UDP和SCTP
1.OSI模型OSI(open systems interconnection)计算机通信开放系统互连模型,是一个七层的理论模型(也就是说理论上分得很细致完善,但实际中设计实现中有出入)实际过程中我们一般采用网际网协议族物理层和数据链路层干的事情可以对应为网络硬件和设备驱动程序,如果不是要写驱动程序,一般我们不予关心。网络层中规定的协议是什么呢? 就是我们经常说的I原创 2017-07-03 10:04:22 · 619 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网API-第2章:端口号和查看linux常用服务对应端口号
1.理解端口号的概念最直接的理解:在任意的某个时刻,我们可能正在同时运行多个服务进程。而这多个服务进程在传输层(以tcp/ip协议族为例)都是使用tcp/udp/sctp。所以,我们就需要以某种机制,来区分这些同时使用相同协议的进程,作为编程人员,我们第一反应就是给这些进程+协议再绑定上一个唯一的标识号,称这个标识号为端口号。tcp/udp/sctp都是用16位整数来表示端口号当服务进原创 2017-07-03 18:43:53 · 797 阅读 · 0 评论 -
UNIX网络编程卷1:套接字联网-第3章:套接字编程-套接字地址结构和值结果参数
套接字地址结构:首先找到定义套接字地址结构的文件,我使用的ubuntu14.04,路径:/usr/include/netinet/in.h1.IPV4套接字地址结构2.IPV6套接字地址结构3.老的通用套接字地址结构4.新的通用套接字地址结构原创 2017-07-04 16:58:15 · 373 阅读 · 0 评论 -
TCP状态转换详解
1.TCP状态转换图(TCP状态转换图)上图截取自UNIX网络编程卷1TCP的11种状态:CLOSED :起始点,在连接关闭或超时的时候变成此状态LISTEN : 监听来自网络节点上其他主机的TCP端口连接请求,服务端需要调用socket, bind,listen函数,就进入此状态。此称为应用程序被动打开(等待客户端来连接)SYN_RCVD :如图所示,服务器接收到来自客户原创 2017-07-02 13:54:29 · 1291 阅读 · 0 评论 -
使用netstat调试TCP应用
首先要明确netstat是干嘛的:netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。1.学会查看netstat帮助文档netstat -help2.执行原创 2017-07-02 13:49:25 · 2369 阅读 · 0 评论 -
UNIX编程专题-服务器进程终止/服务器主机崩溃/服务器主机崩溃后重启/服务器主机关机
1.服务器进程终止(或者服务器进程崩溃,被迫中止) 讨论没有I/O复用的程序的缺陷。若客户端在应对多个描述符(称其为源,都有可能被阻塞在源上的操作),我们不能单纯的阻塞在某个特定源头的输入上,而是应该阻塞在其中任何一个源的输入上(这正是为什么需要I/O复用的原因)。以回射程序举例,客户端程序需要操作两个描述符-套接字和用户输入,若是只单纯阻塞在fgets上等待用户的输入,则不能及时响应套接字状原创 2017-07-14 19:08:41 · 1450 阅读 · 3 评论