问题 问答题

【说明】 代码实例中的服务器通过socket连接向客户端发送字符串"Hello,you are connected!"。只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。 客户端程序代码如下: #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h> #include<netdb.h> #include<sys/types.h> #include<netinet/in.h> #include<sys/socket.h> #define SERVPORT 3333 #define MAXDATASIZE 100 /*每次最大数据传输量*/ main(int argc, char*argv[]){ int sockfd, recvbytes; char buf[MAXDATASIZE]; stmct hostent*host; struct sockaddr_in serv_addr; if (1) { fprintf(stderr, "Please enter the server’s hostname!\n"); exit(1); } if<(host=gethostbyname(argv[1]))=NULL) { herror("gethostbyname出错!"); exit(1); } if ((sockfd = socket(AF_INET, (2), 0))=-1) { perror("socket创建出错!"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(SERVPORT); Serv_addr.sin_addr=*((structin_addr*)host→h_addr); bzero(&(serv_addr.sin_zero), 8); if(connect (3), (struct sockaddr *)&serv_addr, sizeof(struct sockaddr))=-1) { perror("connect出错!"); exit(1); } if((recvbytes=recv (4), buf, MAXDATASIZE, 0))=-1) { perror("recv出错!"); exit(1); } buf[recvbytes]=’\0’; pfintf("Received: %s", buf); close(sockfd); }

答案

参考答案:

解析:(1)argc<2 //判断参数个数是否为2;即判断是否输入主机名。 (2)SOCK_STREAM //说明是面向连接的通信 (3)Sockfd //制定SOCKET号 (4)Sockfd //制定SOCKET号 客户端程序首先通过服务器域名获得服务器的IP地址,然后创建一个socket,调用connect函数与服务器建立连接,连接成功之后接收从服务器发送过来的数据,最后关闭socket。函数gethost-byname( )是完成域名转换的。由于IP地址难以记忆和读写,所以为了方便,人们常常用域名来表示主机,这就需要进行域名和IP地址的转换。无连接的客户/服务器程序的在原理上和连接的客户/服务器是一样的,两者的区别在于无连接的客户/服务器中的客户一般不需要建立连接,而且在发送接收数据时,需要指定远端机的地址。

单项选择题 A1/A2型题
多项选择题