网络编程
辉哥仔Chilam
这个作者很懒,什么都没留下…
展开
-
客户/服务器程序设计范式
概述本节主要探究并发服务器程序设计的另两类变体:预先派生子进程:让服务器在启动阶段调用fork创建一个子进程池,每个客户请求由当前可用子进程池中的某个(闲置)子进程处理; 预先创建线程:让服务器在启动阶段创建一个线程池,每个客户由当前可用线程池中的某个(闲置)线程处理; TCP客户程序设计范式 用于测试各个范式服务器的TCP客户程序#include "unp.h"...原创 2020-01-29 18:14:38 · 421 阅读 · 0 评论 -
线程
概述在传统的Unix模型中,当一个进程需要另一个实体来完成某事时,它就fork一个子进程并让子进程去执行处理。Unix上的大多数网络服务器程序就是这么编写的:父进程accept一个连接,fork一个子进程,该子进程处理与该连接对端的客户之间的通信。尽管如此,但是fork调用却存在一些问题:fork是昂贵的。它要把父进程的内存映像复制到子进程,并在子进程中复制所有描述符等等。当今的实现使...原创 2020-01-28 00:03:32 · 300 阅读 · 0 评论 -
带外数据
概述许多传输层有带外数据的概念,有时候也称经加速数据。其想法是一个连接的某端发生了重要的事情,而且该端希望迅速通告其对端。这里的“迅速”意味着这种通知在已经排队等待发送的任何“普通”数据之前发送,也就是优先级更高。 TCP带外数据 TCP没有真正的带外数据,不过提供了紧急模式。假设一个进程已经往一个TCP套接字写出N字节数据,而且TCP把这些数据排队在该套接字的发送缓冲区中,等...原创 2020-01-26 21:55:07 · 413 阅读 · 0 评论 -
ioctl操作
概述ioctl函数传统上一直作为那些不适合归入其他精细定义类别的特性的系统接口。例如,Unix终端接口传统上使用ioctl访问,然后POSIX为终端创造了12个新函数:tcgetattr:获取终端属性;tcflush:冲刷待处理输入或输出。网络程序(特别是服务器程序)经常在程序启动执行后使用ioctl获取所在主机全部网络接口的信息,包括:接口地址、是否支持广播、是否支持多播等等。...原创 2020-01-25 22:20:29 · 433 阅读 · 0 评论 -
非阻塞式I/O
概述套接字的默认状态是阻塞的。这就意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待响应操作完成。可能阻塞的套接字调用可分为以下四类:输入操作,包括read、readv、recv、recvfrom和recvmsg共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些函数之一,而且该套接字的接收缓冲区中没有数据可读,该进程将被投入睡眠,直到有一些数据到达。如果...原创 2020-01-23 21:49:06 · 445 阅读 · 0 评论 -
高级I/O函数
概述首先介绍了I/O操作上设置超时共有三种办法; 然后是read和write这两个函数的三个变体: recv和send readv和writev recvmsg和sendmsg 如何确定套接字接收缓冲区中的数据量; 如何在套接字上使用C的标准I/O函数库;套接字超时在设计套接字的I/O操作上设置超时的方法有以下3种:调用alarm,它在指定超时期满时产生SI...原创 2020-01-19 23:17:51 · 396 阅读 · 0 评论 -
守护进程和inetd超级服务器
概述守护进程(daemon)是在后台运行且不与任何控制终端关联的进程。Unix系统通常由很多守护进程在后台运行(约在20到50个的量级),执行不同的管理任务。守护进程有多种启动方法:在系统启动阶段,许多守护进程由系统初始化脚本启动。这些脚本通常位于/etc目录或以/etc/rc开头的某个目录中,它们 的具体位置和内容确实实现相关的。由这些脚本启动的守护进程一开始时拥有超级用户特权。有若...原创 2020-01-17 23:31:54 · 374 阅读 · 0 评论 -
名字与地址转换
概述常常地,我们都会使用数值地址来表示主机,用数值端口号来标识服务器。然而出于许多理由,我们应该使用名字而不是数值:名字比较容易记住;数值地址可以变动而名字保持不变;随着IPv6上转移,数值地址变得相当长,手工键入数值地址更易出错。本节讲述在名字和数值地址间进行转换的函数:主机名与IPv4地址之间进行转换:gethostbyname 和 gethostbyaddr 服务名字和端口号之间进...原创 2020-01-14 17:33:14 · 797 阅读 · 0 评论 -
使用select的TCP和UDP服务器
使用select函数的TCP和UDP回射服务器程序#include "unp.h"int main(int argc, char **argv){ int listenfd, connfd, udpfd, nready, maxfdp1; char mesg[MAXLINE]; pid_t childpid; fd_set rset; ssize_...原创 2020-01-14 11:32:18 · 653 阅读 · 0 评论 -
基本UDP套接字编程
概述UDP是无连接不可靠的数据报协议,非常不同于TCP提供的面向连接的可靠字节流。通常有一些常用的应用程序使用UDP:DNS(域名系统) NFS(网络文件系统) SNMP(简单网络管理协议)如下给出了典型的UDP客户/服务器程序的函数调用。客户不用与服务器建立连接,而是只管使用sendto函数给服务器发送数据包,其中必须制定目的地(即服务器)的地址作为参数。类似地,服务器不接受来自客...原创 2020-01-13 17:59:54 · 878 阅读 · 0 评论 -
套接字选项
概述有很多方法来获取和设置影响套接字的选项:getsockopt和setsockopt函数; fcntl函数; ioctl函数;getsockopt和setsockopt函数这两个函数仅用于套接字。#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void...原创 2020-01-05 23:28:00 · 123 阅读 · 0 评论 -
I/O复用:select和poll函数
I/O复用典型使用在下列网络应用场合:当客户处理多个描述符(通常是交互式输入和网络套接字)时,必须使用I/O复用。 如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用。 如果一个服务器既要处理TCP,又要处理UDP,一般要使用I/O复用。 如果一个服务器要处理多个服务或者多个协议(如inetd守护进程),一般要使用I/O复用。I/O模型Unix下可...原创 2019-05-12 21:25:18 · 239 阅读 · 0 评论 -
TCP客户/服务器程序示例
本文使用基本的函数编写一个完整的TCP客户/服务器程序示例。这个简单的例子是执行如下步骤的一个回射服务器:客户从标准输入读入一行文本,并写给服务器。 服务器从网络输入读入这行文本,并回射给用户。 客户从网络输入读入这行回射文本,并显示在标准输出上。int main(int argc,char **argv){ int listenfd,connfd; pid_t chi...原创 2019-05-02 23:57:33 · 732 阅读 · 0 评论 -
套接字编程
套接字地址结构大多数套接字哈桉树都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义它自己的套接字地址结构。这些结构的名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。IPv4套接字地址结构IPv4套接字地址结构以sockaddr_in命名,定义在<netinet/in.h>头文件中。struct in_addr{ in_addr_t ...原创 2019-04-27 23:22:27 · 221 阅读 · 0 评论 -
网络编程--杂记
一个获取客户端时间的程序:#include "unp.h"int main(int argc, char **argv){ int sockfd, n; char recvline[MAXLINE + 1]; ...原创 2019-04-27 17:13:52 · 146 阅读 · 0 评论