第一章 简介和TCP/IP
来源:互联网 发布:手机游戏编程培训 编辑:程序博客网 时间:2024/05/29 09:12
最近在看《Unix网络编程》打算记录下读书过程,用于鞭策自己不要懈怠。
搭建环境
首先是编译环境的搭建,我用的是vm 12 pro+centos7,然后下载源代码 unpv13e.tar.gz
然后解压源代码:tar -xzvf unpv13e.tar.gz
然后查看README文件:
QUICK AND DIRTY===============Execute the following from the src/ directory: ./configure # try to figure out all implementation differences cd lib # build the basic library that all programs need make # use "gmake" everywhere on BSD/OS systems cd ../libfree # continue building the basic library make cd ../libroute # only if your system supports 4.4BSD style routing sockets make # only if your system supports 4.4BSD style routing sockets cd ../libxti # only if your system supports XTI make # only if your system supports XTI cd ../intro # build and test a basic client program make daytimetcpcli ./daytimetcpcli 127.0.0.1If all that works, you're all set to start compiling individual programs.
接着按照顺序来执行上面的命令。
我在执行
cd ../libfree
make
之后出错了:
inet_ntop.c: In function ‘inet_ntop’:inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype size_t size; ^In file included from inet_ntop.c:27:0:/usr/include/arpa/inet.h:64:20: error: prototype declaration extern const char *inet_ntop (int __af, const void *__restrict __cp, ^make: *** [inet_ntop.o] Error 1
于是,vim inet_ntop.c ,将第60行的 size_t size 改成 socklen_t size; ,再重新make即可。
接下来又出错:
[root@yao libfree]# cd ../libroute/[root@yao libroute]# makegcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o get_rtaddrs.o get_rtaddrs.cIn file included from get_rtaddrs.c:1:0:unproute.h:3:45: fatal error: net/if_dl.h: No such file or directory #include <net/if_dl.h> /* sockaddr_sdl{} */ ^compilation terminated.make: *** [get_rtaddrs.o] Error 1
好吧,先把编译问题放到一边,直接
[root@yao unpv13e]# cd intro/[root@yao intro]# make daytimetcpcligcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o daytimetcpcli.o daytimetcpcli.cgcc -I../lib -g -O2 -D_REENTRANT -Wall -o daytimetcpcli daytimetcpcli.o ../libunp.a -lpthread[root@yao intro]# ./daytimetcpcli 127.0.0.1connect error: Connection refused[root@yao intro]# ./daytimetcpcli 127.0.0.1connect error: Connection refused
然后发现daytime服务没开启,centos中开启daytime服务:
[root@yao intro]# yum install xinetd[root@yao intro]# vim /etc/xinetd.d/daytime-stream //*将disable改为no*[root@yao intro]# vim /etc/xinetd.d/daytime-dgram //*将disable改为no*[root@yao intro]# service xinetd restartRedirecting to /bin/systemctl restart xinetd.service[root@yao intro]# ./daytimetcpcli 127.0.0.112 JUN 2016 10:28:58 CST
于是搞定了。
1.2
这里面的好多函数都是后面章节会介绍的,先了解一下。
#include "unp.h"int main(int argc, char **argv){ 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) err_sys("socket error"); bzero(&servaddr, sizeof(servaddr));//清零 servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); /* daytime server 端口 */ if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)//将IP转换为合适的格式 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 terminate */ if (fputs(recvline, stdout) == EOF) err_sys("fputs error"); } if (n < 0) err_sys("read error"); exit(0);}
0 0
- 第一章 简介和TCP/IP
- UNP第一章 简介TCP和IP
- 第一部分简介和TCP/IP 第一章简介
- 【UNIX网络编程读书笔记】第一章 简介和TCP/IP(第一个程序)
- 【UNIX网络编程读书笔记】第一章 简介和TCP/IP(程序之后的笔记)
- 《UNIX网络编程卷1》读书笔记--第一章 简介和TCP/IP
- TCP/IP详解 第一章
- TCP/IP详解--第一章
- 第一章 什么是TCP/IP
- 第一章 TCP/IP概述
- 第一章 什么是TCP/IP
- TCP/IP 校验和算法简介
- TCP/IP 校验和算法简介
- OSI和TCP/IP协议模型简介
- IP,端口,tcp和udp简介
- 第一章 TCP/IP协议族
- TCP/IP详解第一章笔记
- 《TCP/IP原理》》笔记:第一章
- Swift - 使用NSUserDefaults来进行本地数据存储
- 底包和基带是什么?刷机前有必要先刷它们吗?
- java学习笔记之char与byte的区别
- 剑指offer(五十五)之表示数值的字符串
- 关于闭包
- 第一章 简介和TCP/IP
- Android Studio自定义模板 写页面竟然可以如此轻松
- 欢迎使用CSDN-markdown编辑器
- Glide库的封装使用
- Making Quick macroScripts in 3DS Max
- 文件上传漏洞常见利用方式分析
- SHELL编程之执行过程
- PHP学习笔记-数组
- java学习笔记之Socket