《Unix 网络编程》学习笔记 第一章:简介

来源:互联网 发布:mac怎么建文本文件 编辑:程序博客网 时间:2024/05/16 01:07

1.1概述

要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(Protocol)。坚持采用客户/服务器(C/S)模型的网络应用较为普遍。

1.2一个简单的时间获取程序

#include "unp.h"  //包含本书作者编写的头文件,该头文件包含大部分网络程序都需要的系统头文件intmain(int argc, char **argv)   //其形参就是命令行参数,即程序运行命令行参数需要输入服务器IP地址{int sockfd, n;char recvline[MAXLINE + 1];struct sockaddr_in servaddr;if(argc != 2)err_quit("usage: a.out <IPaddress>");if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)  //socket函数创建一个网际(AF_INET)字节流(SOCK_STREAM)套接字,且返回一个小整数描述符err_sys("socket error");bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(13); //1、端口号13 是时间服务端口号 2、htons是整型数据转变字节序(大小端)为网络字节序if(inet_pton(AF_INET, argv[1], &servaddr,sin_addr) <= 0) //库函数inet_pton将字符型参数转换为数值err_quit("inet_pton error for %s", argv[1]);if(connect(sockfd, (SA*) &servaddr, sizeof(servaddr)) < 0)err_sys("connect error");while ((n = read(sockfd, recvline, MAXLINE)) > 0) {recvline[n] = 0;//null terminateif (puts(recvline, stdout) == EOF)err_sys("fputs error");}if (n < 0)err_sys("read error");exit(0);}
源代码下载地址:http://www.unpbook.com/src.html

tar -xzvf upv13e.tar.gz
打开解压的目录,发现有个readme文件,按照要求的步奏执行即可。

当然你会发下,如果你的linux环境,未打开daytime服务的,需要开启daytime服务,就在你当前的源代码目录ls你可以看到有个daytimetcpsrv文件,执行sudo ./daytimetcpsrv。它的功能就是开启本机的daytime服务。

1.3协议无关性

通过修改上面程序的5行代码(包括套接字结构类型,网际族设置参数),可以得到与IPv6协议相关的程序。如何编写与协议无关的版本,同时人们更习惯于用域名来代替数字。后续11章会讨论这些问题。

1.4错误处理:包裹函数

通过定义包裹函数来缩短程序。每个包裹函数完成实际的函数调用,检查返回值,并在发生错误时种植进程。

1.5一个简单的时间获取服务器程序




原创粉丝点击