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