下面是一个面向连接的SOCKET实例,填入(n)处。 【说明】 代码实例中的服务器通过socket连接向客户端

13 查阅

下面是一个面向连接的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)argc2 //判断参数个数是否为2;即判断是否输入主机名。(2)SOCK_STREAM //说明是面向连接的通信(3)Sockfd //制定SOCKET号(4)Sockfd //制定SOCKET号 客户端程序首先通过服务器域名获得服务器的IP地址然后创建一个socket调用connect函数与服务器建立连接连接成功之后接收从服务器发送过来的数据最后关闭socket。函数gethost-byname( )是完成域名转换的。由于IP地址难以记忆和读写所以为了方便人们常常用域名

软考初级