- 论坛徽章:
- 0
|
代码在下面,是很简单的daytime服务,我对于他的输出觉得很奇怪- #include "unp.h"
- #include <time.h>
- int main(int argc,char **argv){
-
- struct sockaddr_in servaddr,cliaddr;
- socklen_t len;
- char buf[BUFSIZ];
- int listenfd,connfd;
- time_t t;
- if((listenfd = socket(AF_INET,SOCK_STREAM,0)) <0 ){
- perror("socket");
- return -1;
- }
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons(atoi(argv[1]));
-
- if(bind(listenfd,(SA *)&servaddr,sizeof(servaddr)) < 0){
- perror("bind");
- return -1;
- }
- if(listen(listenfd,LISTENQ) < 0){
- perror("listen");
- return -1;
- }
- for(;;){
- if((connfd = accept(listenfd,(SA *)&cliaddr,&len)) < 0){
- if(errno == EINTR) continue;
- else return -1;
- }
- printf("%s\n",cliaddr.sin_family == AF_INET?"AF_INET":"NOT AF_INET");
- fprintf(stderr,"connect from %s\nport on %d\n",\
- inet_ntop(cliaddr.sin_family,&cliaddr.sin_addr,buf,sizeof(buf)),\
- ntohs(cliaddr.sin_port));
- t = time(NULL);
- sprintf(buf,"%s",ctime(&t));
- write(connfd,buf,strlen(buf));
- close(connfd);
- }
- }
复制代码 我连接了两次这个server端程序(nc 127.0.0.1 9999每次都以这样的形式运行),得到的server端的输出如下
$./ser 9999
NOT AF_INET
connect from (null)
port on 1032
AF_INET
connect from 127.0.0.1
port on 55578
我不明白为什么会有null出来,然后我给了一句代码,把inet_ntop改成
inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf)),\
ntohs(cliaddr.sin_port));
输出变成了
NOT AF_INET
connect from 128.155.150.0
port on 1032
AF_INET
connect from 127.0.0.1
port on 35763
不知到怎么又出来了个128.155.150.0这样的IP,我能保证我在client端的sin_family是设置成AF_INET的,谁能解释一下吗 |
|