下面是一个面向连接的SOCKET实例,填入(n)处。 【说明】 代码实例中的服务器通过socket连接向客户端发送字符串"Hello,you are connected!"。只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该

admin2009-05-15  50

问题 下面是一个面向连接的SOCKET实例,填入(n)处。
   【说明】
   代码实例中的服务器通过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地址的转换。无连接的客户/服务器程序的在原理上和连接的客户/服务器是一样的,两者的区别在于无连接的客户/服务器中的客户一般不需要建立连接,而且在发送接收数据时,需要指定远端机的地址。

解析
转载请注明原文地址:https://jikaoti.com/ti/Y8n7FFFM
0

最新回复(0)