《网络编程技术》实验指导书(2)

2019-03-27 16:16

char str[32];

/* 取得命令后第一个参数,即要解析的域名或主机名 */ ptr = argv[1];

/* 调用gethostbyname()。调用结果都存在hptr中 */ if( (hptr = gethostbyname(ptr) ) == NULL ) {

printf(\

return 0; /* 如果调用gethostbyname发生错误,返回1 */ }

/* 将主机的规范名打出来 */

printf(\ /* 主机可能有多个别名,将所有别名分别打出来 */ for(pptr = hptr->h_aliases; *pptr != NULL; pptr++) printf(\ alias:%s\\n\ /* 根据地址类型,将地址打出来 */ switch(hptr->h_addrtype) {

case AF_INET: case AF_INET6: pptr=hptr->h_addr_list;

/* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 */ for(;*pptr!=NULL;pptr++)

printf(\ address:%s\\n\ break; default:

printf(\ break; } return 0;

6

} (4)

客户端程序如下: #include #include #include #include #include #define PORT 1234

#define MAXDATASIZE 100 int

main(int argc, char *argv[]) { int fd, numbytes;

char buf[MAXDATASIZE]; char rvbuf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in server; if (argc != 2) { printf(\ exit(-1);

}

if ((he =gethostbyname(argv[1])) == NULL) { perror(\ exit(1);

}

if ((fd =socket(AF_INET, SOCK_STREAM, 0)) == -1) {

perror(\

7

exit(1); }

bzero(&server,sizeof(server)); server.sin_family =AF_INET; server.sin_port=htons(PORT);

memcpy(&server.sin_addr,he->h_addr,sizeof(struct in_addr));

if (connect(fd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) { }

struct sockaddr_in localaddr; perror(\exit(1);

socklen_t len = sizeof(localaddr);

getsockname(fd,(struct sockaddr *)&localaddr,&len); printf(\

Localip

and

Localport

is: %s:%d\\n\

struct sockaddr_in peeraddr; socklen_t lenp = sizeof(peeraddr);

getpeername(fd, (struct sockaddr *)&peeraddr,&lenp); printf(\

Peerip

and

Peerport

is: %s:%d\\n\ }

服务器端程序如下: #include #include #include #include #include

8

close(fd);

#define PORT 1234 #define BACKLOG 1

void process_cli(int connectfd,struct sockaddr_in client); int main(void) {

int listenfd, connectfd; struct sockaddr_in server, client; int sin_size;

if((listenfd=socket(AF_INET, SOCK_STREAM, 0))==-1) { perror(\

exit(-1);

}

int opt=SO_REUSEADDR;

setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family =AF_INET; server.sin_port =htons(PORT);

server.sin_addr.s_addr =htonl(INADDR_ANY);

if (bind(listenfd, (struct sockaddr*)&server, sizeof(struct sockaddr))== -1) { perror(\ exit(-1);

}

if (listen(listenfd, BACKLOG) == -1) { perror(\ exit(-1);

}

9

sin_size =sizeof(struct sockaddr_in); while(1) {

if ((connectfd =accept(listenfd, (struct sockaddr *)&client,&sin_size)) == -1) { perror(\

exit(-1);

} close(connectfd);

}

close(listenfd); }

10


《网络编程技术》实验指导书(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:【温州2019届高三适应性测试】2018年8月温州市普通高中选考适应

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: