UNIX网络编程首个示例程序

282 阅读1分钟

笔者的机器为:

macOS 10.13.6

1.首先在本地下载书上的源代码的压缩包,地址为:

http://www.unpbook.com/unpv13e.tar.gz

2.本地解压到桌面(方便后续的操作)

3.通过终端将解压后的unpv13e文件夹,上传到远程的阿里云服务器(自购),命令大体上为:

scp -i ~/.ssh/id_rsa -r unpv13e username@地址:服务器上的某位置

我个人是上传到普通用户下

4.接下来按照

https://github.com/unpbook/unpv13e

上的README操作,即:

1.cd到unpv13e目录下
2.执行 ./configure
3.cd到lib下,执行make
4.cd到libfree下,执行make会报错:
	执行 vim inet_ntop.c ,将size_t size改成socklen_t size
5.再次make

5.这一步骤参考:

blog.csdn.net/sinat_36053…

将生成的 libunp.a 静态库复制到/usr/lib/ 和 /usr/lib64/ 中

cd ..   //回到 unpv13e 目录   
sudo cp libunp.a /usr/lib   
sudo cp libunp.a /usr/lib64   

修改 unp.h 并将其和 config.h 拷贝到 /usr/include 中

vim lib/unp.h //将 unp.h 中#include "../config.h"修改为#include "config.h"   
sudo cp lib/unp.h /usr/include   
sudo cp config.h /usr/include   

编译书本例子。注意:编译时必须加上静态链接库:-l 参数加上 libunp.a 去掉lib和后面的.a。最后得到参数-lunp

cd ./intro   
gcc daytimetcpcli.c -o daytimetcpcli -lunp 

测试上面生成的可执行文件获取本机当前日期:

./daytimetcpcli 127.0.0.1

在进行测试时会出现以下错误:

connect error:Connection refused 

其实这个是因为xinetd服务没有启动,如果没有安装,用管理员身份下载

(笔者的服务器是centos,命令为sudo yum install xinetd

6.cd到/etc/xinetd.d下,然后分别修改daytime-dgramdaytime-stream中的disableno。再依次执行service xinetd restart 以及systemctl restart xinetd

7.这个时候再去unpv13e文件下,cd到intro,依次执行make daytimetcpcli1./daytimecpcli1 127.0.0.1,从而得到想要的结果。