b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

<> 源码编译daytimetcpcli.c 问题汇总

电脑杂谈  发布时间:2019-11-25 00:02:35  来源:网络整理

unix网络编程源码运行_unix环境高级编程 3 下载_unix网络高级编程

最近开始学习unix网络编程,开篇第一个程序daytimetcpcli.c编译运行失败unix网络编程源码运行,就花费了好多心思,把难题汇总起来,供大家参考。

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

书中源代码如下:

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

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

int

main(int argc, char **argv)

{

intsockfd, n;

charrecvline[MAXLINE + 1];

struct sockaddr_inservaddr;

if (argc != 2)

unix网络高级编程_unix环境高级编程 3 下载_unix网络编程源码运行

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 */

unix网络高级编程_unix环境高级编程 3 下载_unix网络编程源码运行

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

unix网络编程源码运行_unix网络高级编程_unix环境高级编程 3 下载

#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字串,心里而是有些遗憾。现在起码可证明

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

unix环境高级编程 3 下载_unix网络高级编程_unix网络编程源码运行

随后在基维百科中发现daytime协议的解释:

DAYTIME协议(英语:DAYTIME protocol)是一个在RFC867内定义的网络传输协议。

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

服务器会以ASCII字符传回当时日期及时间。格式类似:星期unix网络编程源码运行,月 日,年 时区。

它也用作测试手机网络的联通性,现在测试网络的方式已经转为用ping或traceroute。

DAYTIME协议在inetd上

在Linux、FreeBSD,或其它类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上面有很多#开头的行,应该是这些服务都应手工进入。

书中第一个例子似乎完美执行失败,这样的起初才使人兴奋。小白继续前进

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


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-131205-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...