UNIX网络编程学习(8)--服务器端显示客户端的IP地址和端口号

来源:互联网 发布:mac无u盘安装win10 编辑:程序博客网 时间:2024/05/01 11:28
#include"unp.h"#include<time.h>intmain(int argc, char **argv){intlistenfd, connfd;socklen_t           len;struct sockaddr_inservaddr,cliaddr;charbuff[MAXLINE];time_tticks;listenfd = Socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family      = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port        = htons(10086);/* daytime server */Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));Listen(listenfd, LISTENQ);for ( ; ; ) {    len=sizeof(cliaddr);connfd = Accept(listenfd, (SA *) &cliaddr, &len);printf("connection from %s,port %d\n",                Inet_ntop(AF_INET,&cliaddr.sin_addr,buff,sizeof(buff)),                ntohs(cliaddr.sin_port));        ticks = time(NULL);        snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));        Write(connfd, buff, strlen(buff));Close(connfd);}}


其中,包裹函数Inet_ntop为:

//wraplib.c

/* * Wrapper functions for our own library functions. * Most are included in the source file for the function itself. */#include"unp.h"const char *Inet_ntop(int family, const void *addrptr, char *strptr, size_t len){const char*ptr;if (strptr == NULL)/* check for old code */err_quit("NULL 3rd argument to inet_ntop");if ( (ptr = inet_ntop(family, addrptr, strptr, len)) == NULL)err_sys("inet_ntop error");/* sets errno */return(ptr);}voidInet_pton(int family, const char *strptr, void *addrptr){intn;if ( (n = inet_pton(family, strptr, addrptr)) < 0)err_sys("inet_pton error for %s", strptr);/* errno set */else if (n == 0)err_quit("inet_pton error for %s", strptr);/* errno not set *//* nothing to return */}


 

原创粉丝点击