环境搭建 在尝试UNP书上的样例时,会由于找不到"unp.h"等问题无法编译成功。因此在学习之前须要先搭建好编译环境。 步骤 <1>下载 UNIX网络编程源码unpv13e.tar.gz下载链接 http://download.csdn.net/detail/ymsdu2004/4906181 <2>解压 进入该文件夹后运行./configure 再进入lib文件夹下 cd lib 运行 make此时会在上层文件夹(就是刚才有configure那个文件夹)生成libunp.a文件 <3>复制libunp.a到 /usr/lib下 (以后gcc编...
继续贴《unix网络编程》上的示例代码。这次是一个反射程序,反射是客户端讲用户输入的文本发送到服务器端,服务器端读取客户端发过来的文本消息,然后原封不动的把文本消息返回给客户端。使用tcp协议连接客户端和服务端,我已经在我的阿里云服务器上测试过了,能够完美运行。 首先是头文件wrap.h,在该头文件中,声明了封装部分网络编程套接字api的包裹函数,以及某些宏定义。 1#ifndef WRAP_H_2#define WRAP_H_3 4 #include <stdi...
#include "net.h"#include <syslog.h> // syslog() int daemon_proc;staticvoid err_doit(int errnoflag, int level, constchar *fmt, va_list ap)
{int errno_save, n;char buf[MAXLINE + 1];errno_save = errno;#ifdef HAVE_VSNPRINTFvsnprintf(nuf, MAXLINE, fmt, ap);
#elsevsprintf(buf, fmt, ap);
#endifn = strlen(buf);if (errnoflag)snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));strcat(buf, "\n")...
编写一个完整的TCP客户和服务器程序所需要的基本套接口函数:1、socket函数(客户端、服务器端都必须调用)参数family指明协议族(family),该参数也往往被称为协议域(domain)。所以有的书上声明如下:而且对于socket函数第一个参数,在不同书籍上可能会看到不同前缀的取值常量列表,如下两图所示:AF_xxx与PF_xxx:AF_前缀表地址族,PF_前缀表示协议族。历史上曾有这样的想法:单个协议族可以支持多个地址族,PF_值用来创建套接口,...
前言大多数套接口函数都需要一个指向套接口地址结构的指针作为参数。每个协议族都定义它自己的套接口地址结构。这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结束。IPv4套接口地址结构IPv4套接口地址结构通常也称为”网际套接口地址结构“,它以”sockaddr_in“命名,定义在头文件<netinet/in.h>中。其POSIX定义如下:/* sockaddr_in */struct in_addr {in_addr_t s_addr; /* 23 bits IPv4 a...
1、read-----------------------------------------------------------------------#include <unistd.h>ssize_t read(int fd, void *buf, size_t nbyte); ----------------------------------------------------------------------- read()函数是负责从fd中读取内容。当读成功时,read()返回实际所读的字节数,如果返回的值是0,表示已经读到文件的结束了,小于0表示出现了错误。如果错误为EINTR说明读是由中断引起的,如果是EC...
1、基本结构大多数套接口函数都需要一个指向套接口地址结构的指针作为参数。每个协议族都定义它自己的套接口地址结构。这些结构的名字均以“sockaddr_”开头,并以对应每个协议族的唯一后缀结束。1.1 IPv4套接口地址结构也称为“网际套接口地址结构”,以“sockaddr_in”命名,在头文件<netinet/in.h>中。struct in_addr
{in_addr_t s_addr; //32为IP地址};struct sockaddr_in
{uint8 sin_len; //为了增加OSI协议支持,有些版...
int socket(int family, int type, int protocol); 该接口创建一个套接字family指定协议族(通常是AF_INET);type参数指定socket的类型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol通常赋值"0"。 int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 将套接字绑定到IP地址和端口 struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_add...
1. 概述三种类型的System V IPC:System V 消息队列、System V 信号量、System V 共享内存区System V IPC在访问它们的函数和内核为它们维护的信息上共享许多类似点。本章讲述所有这些共同属性。下图汇总了所有System V IPC 函数2. key_t键、ftok函数头文件sys/types.h把数据类型key_t定义为一个整数,通常是一个至少32位的整数#include<sys/ipc.h>key_t ftok (constchar*pathname,int id);Returns: IPC key if OK,-1 on error...
好久不读不用又忘得差不多了,还是感叹Richard Stevens真是太刁,25年前第一版。"Tcp state diagram fixed new" by Scil100. Licensed under CC BY-SA 3.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Tcp_state_diagram_fixed_new.svg#/media/File:Tcp_state_diagram_fixed_new.svgTCP连接建立: TCP连接断开: TIME_WAIT:为MSL(maximum segment lifetime)的两倍,(a)可靠的实现TCP全双工连接的终止。如果...
上一节给出了TCP网络编程的函数。这一节使用那些基本函数编写一个完毕的TCP客户/server程序演示样例。该样例运行的过程例如以下:1、客户从标准输入读入一行文本,并写给server。2、server从网络输入读入这行文本,并回射给客户。3、客户从网络输入读入这行回射文本,并显示在标准输出上。用图描写叙述例如以下:编写TCP回射server程序例如以下:#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <strings.h>
...
str_cli 和 str_echo 函数需要先弄清楚 3.9 readn、writen 和 readline 函数str_clivoid
str_cli(FILE *fp, int sockfd)
{char sendline[MAXLINE], recvline[MAXLINE];while (Fgets(sendline, MAXLINE, fp) != NULL) {Writen(sockfd, sendline, strlen(sendline));if (Readline(sockfd, recvline, MAXLINE) == 0)err_quit("str_cli: server terminated prematurely");Fputs(recvline, stdout);}
}
Fgetsfgetschar * fgets ( char ...
什么是I/O复用?What we need is the capability to tell the kernel that we want to be notified if one or more I/O conditions are ready (i.e., input is ready to be read, or the descriptor is capable of taking more output). This capability is called I/O multiplexing and is provided by the select and poll functions. ——来自《Unix网络编程》第三卷在很多情况下,使用select或是poll,可以把事件的响应交给底层...
概述UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同。UNIX域协议可视为进程间通信(IPC)方法之一。UNIX域提供两类套接口:字节流套接口(类似TCP)和数据报套接口(类似UDP)。使用UNIX域套接口的理由有3个:在源自Berkeley的实现中,UNIX域套接口往往比通信两端位于同一主机的TCP套接口快出一倍。UNIX域套接口可用于在...
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件第二步:下载本书示例源码包第三步:解压下载到的包并放在用户主目录中第四步:进入包内并执行以下命令1sudochmod u+x configure
2 ./configure第五步:进入包内lib子目录下执行make命令第六步:进入包内libfree子目录下执行make命令第七步:进入包内libgai子目录下执行make命令第八步:执行以下命令,将前面生成的libunp.a库复制到/usr/lib和/usr/lib64中1...