出版社:清华大学出版社
备注:中文版
原书第157-158页代码:
源代码如下:
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 13
int main(void)
{
int serverFD,connetctionFD;
struct sockaddr_in servaddr;
char timebuffer[MAX_BUFFER+1];
time_t currentTime;
serverFD = socket ( AF_INET, SOCK_STREAM, 0 );
memset( &servaddr, 0, sizeof(servaddr) );
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
bind( serverFD, (struct sockaddr *)&servaddr, sizeof(servaddr) );
listen( serverFD, 5 );
while(1) {
connetctionFD = accept( serverFD, (struct sockaddr *)NULL, NULL );
if (connetctionFD >= 0) {
currentTime = time( NULL );
snprintf( timebuffer, MAX_BUFFER, "%s \n", ctime( ¤tTime) );
write( connetctionFD, timebuffer, strlen(timebuffer));
close( connetctionFD );
}
}
}
按照书上的讲解,使用的端口为13,
但是运行的效果是:
hello@world:~$ telnet localhost 13
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
hello@world:~$
很显然这个端口是被占用的了。
所以为了能够有效运行,将宏定义中的端口改为1024之后的不常用的端口,就可以了。
如果还是不行的话,就更换端口。(或者事先用工具扫描已经使用的端口,分配端口时,避开就可以了)
没有评论:
发表评论