<<unix 网络编程>> 源码编译daytimetcpcli.c 问题汇总

最近开始学习unix网络编程,开篇第一个程序daytimetcpcli.c编译运行成功,就花费了很多心思,把问题汇总出来,供各位参考。

FreeBsd unix 系统构建的vmware虚拟机,之前对FreeBsd也是小白,虽说也玩过linux,对网络通信这些设置啊还是不熟。

书中源代码如下:

#include
"../lib/unp.h"

#include "../lib/error.c"

int

main(int argc, char **argv)

{

int sockfd, n;

char recvline[MAXLINE + 1];

struct sockaddr_inservaddr;

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)

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);

}

FreeBsd 安装成功后,telnet 和ftp这些服务,要自己开启,在/etc/inetd.conf,用ee命令开启,可以直接编辑,

要保存必须用root权限,esc后aa保存。ps -ef | grep inetd 查看PID号,kill 后,用 inetd -wW重

新开启,新设置生效。

编辑其实就是去掉相应行的“#”注释。

#ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l

#ftp     stream  tcp6    nowait  root    /usr/libexec/ftpd       ftpd -l

#telnet  stream  tcp     nowait  root    /usr/libexec/telnetd    telnetd

#telnet  stream  tcp6    nowait  root    /usr/libexec/telnetd    telnetd

言归正传,cc daytimetcpcli.c,生成a.out, 运行./a.out 127.0.0.1

总是提示connect error: Connection refused。

用sockstat 查看服务器运行的端口,有21,23这些常见的端口。

百度说应该没有开daytime服务端口。看freebsd手册,说这些服务是内置默认启动的。

再回到网络编程书中,看后面的代码解释,知道是connect执行失败,再分析后关键点在

htons(13)这个函数,

其中13是服务端口号,把13改成其他端口看看,然后改成21,发现执行成功。

虽然执行成功,但是不是书中的daytime字串,心里还是有些遗憾。现在至少能证明

服务器没有问题,应该是配置还有些没有设置正确。继续百度。

随后在基维百科中看到daytime协议的解释:

DAYTIME协议英语DAYTIME protocol)是一个在RFC 867内定义的网络传输协议

主机可以用TCPUDP端口 13连接支持DAYTIME协议的服务器。

服务器会以ASCII字符传回当时日期及时间。格式类似:星期,月 日,年 时区。

它也用作测试电脑网络的联通性,现在测试网络的方法已经转为用pingtraceroute

DAYTIME协议在inetd上

LinuxFreeBSD,或其他类UNIX操作系统中,DAYTIME时间服务器是在inetd中内置。通常DAYTIME协议服务是默认关闭的,或是在/etc/inetd.conf文件中加上以下数据以打开服务:

daytime   stream  tcp     nowait  root    internal
daytime   stream  tcp6    nowait  root    internal
daytime   dgram   udp     wait    root    internal
daytime   dgram   udp6    wait    root    internal

看了上面的解释,再把daytime服务开启,重新启动inetd,一切OK

看到inetd.conf里面有很多#开头的行,应该是很多服务都要手工开启。

书中第一个例子总算完美执行成功,这样的开始才让人欣喜。小白继续前进

时间: 2024-07-30 11:57:37

<<unix 网络编程>> 源码编译daytimetcpcli.c 问题汇总的相关文章

Unix网络编程第三版源码编译

配置: $ cd Unix-Network-Programming/ $ chmod 755 configure $ ./configure 主要的工作是检查系统是否有源码编译所依赖的各种资源(系统版本是否匹配.编译器.库文件.头文件以及结构体定义等等) checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking for

UNIX网络编程卷2 源码编译篇

W. Richard Stevens的主页: 源代码下载   >>  ~/Downloads/unpv22e.tar.gz; 1 tar -xzfv unpv22e.tar.gz 2 cd unpv22e 3 ./configure 4 cd lib 5 make make编译失败,因为需要对两个文件修改,unpv22e/config.h和unpv22e/wrapunix.c. 1 vi config.h 2 3 /*注释掉这三行*/ 4 // #define uint8_t unsigned

unix网络编程各种TCP客户-服务器程序设计实例附环境搭建和编译方法(一)

一,到http://download.csdn.net/detail/ts173383201/4505201去下载源代码,然后解压: 二,cd到你解压后的文件夹下,就是有configure的那个目录下,执行命令./configure: 三,执行cd lib跳到lib目录下,执行make命令,会在上层目录(就是刚才有configure那个目录)生成libunp.a文件 四,复制这个静态库libunp.a到/usr/lib/和/usr/lib64/中; 五,接下来在目录中找到unp.h和config

《UNIX网络编程 卷1》之&quot;学习环境搭建&quot;(CentOS 7)

<UNIX网络编程 卷1>的源码可以从www.unpbook.com下载得到.解压之后的目录为unpv13e.  1. 编译 进入unpv13e目录,按如下步骤编译: 1 ./configure 2 3 cd lib 4 make // 可能遇到问题:redefinition of ‘struct in_pktinfo’ 5 6 cd ../libfree 7 make 8 9 cd ../libroute 10 make //这一步可能会出错,可忽略,只是表示你的系统不支持 4.4BSD,并

UNIX网络编程入门——TCP客户/服务器程序详解

前言 最近刚开始看APUE和UNP来学习socket套接字编程,因为网络这方面我还没接触过,要等到下学期才上计算机网络这门课,所以我就找了本教材啃了一两天,也算是入了个门. 至于APUE和UNP这两本书,书是好书,网上也说这书是给进入unix网络编程领域初学者的圣经,这个不可置否,但这个初学者,我认为指的是接受过完整计算机本科教育的研究生初学者,需要具有完整计算机系统,体系结构,网络基础知识.基础没打好就上来啃书反而会适得其反,不过对于我来说也没什么关系,因为基础课也都上得差不多了,而且如果书读

unix网络编程环境搭建

unix网络编程环境搭建 新建 模板 小书匠 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xzvf upv13e.tar.gz 3.上传至阿里云 本人本地已经配置好,这次实验是将环境搭建至云服务器中. scp -r unpv13e [email protected]120.76.140.119:/root/program/unp // -r 上传文件夹  4.编译文件 cd unpv13

记录一次配置unix网络编程环境的过程和遇到的问题

记录一次搭建unix网络编程环境过程中遇到的问题和总结 计算机环境虚拟机 linuxmint-18-xfce-64bit 1.打开unix网络编程.iso 把目录下的文件夹复制到某一目录,修改权限,可命令可鼠标操作. 2. [email protected] ~/unix/unpv13e $ sudo su [sudo] s 的密码: ss-Linux unpv13e # ./configure checking build system type... x86_64-unknown-linux

【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,

CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础软件包,在这个基础环境上我们可以搭建任何使用PHP/Perl/Python等语言的动态网站,如商务网站.博客.论坛和开源Web应用程序软件等,它是互联网上被广泛使用的Web网站架构之一. 部署方式 从网站规模大小(访问流量.注册用户等)角度来看,LNMP架构可以使用单机部署方式和集群部署方式.单机部