请阅读以下说明和Socfort程序,将应填(n)处的字句写在对应栏内。

网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。

以下是一个简单的客户机程序(服务器程序略),其工作过程非常简单:客户机与服务器建立连接后,接收服务器向客户机返回的一条消息。

程序中用到了两种结构hostent与sockaddr_in:

hostent类型的结构定义如下:

struct hostent { char * h_name; //主机的正式名称

char * * h-aliases; //别名列表

int h_addrtype; //主机地址类型:AF-XXX

int H_length; //主机地址长度:4 B(32 b)

char * * h_addr_list; //主机IP地址列表}

define h???-addr h-addr-liSt[0]

sockaddr_in类型的结构定义:sockaddr_in是通用套接字结构sockaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。

Struct sockaddrin{

short int sin-family;//地址类型AF_XXX,其中AF_INET为TCP/P专用

unsigned short int sin-port; //端口号

struct in_addr Sin_addr; //Internet地址

//端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换

}

struct iN_addr{

_u32 s-addr; //类型为unsignel-long

}

程序中使用到了多个函数:

struct hostent * gethostbyname(const char * hostname);

函数gethostbyname查询与指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功则返回NULL。

Int?_socket(int domain,im-type,int protoco1);

函数socket创建一个套接字描述符,如果失败返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。

int connect(int sockfd,struct sockaddr * servaddr,int addrlen);

函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。

int read(intfd,char * bur,int len);

int write(intfd,char * buf,int len);

函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。

[Socket程序]

//程序中引用的头丈件略

definePORT 3490

//定,义端口号为3490

int main(int argc,char * argv[])

{int tsockfd,nbytes;//套接字描述符、读入缓冲区的字节数

char buf[1024];//缓冲区

struct hostent * he;//主机信息类型

struct (1) srvadd;//Internet套接字结构

if(argc!=2)

{perror(“调用参数为零,请输入服务器的主机名!\n”);exit(1);}

if((2))//如果通过主机名没有获得对应的主机信息就提示用户

{perror(“无法通过主机名获得主机信息!\n”);exit(1);}

if((3))//在无法创建套接字时,提示用户

{perror(“无法创建套按字!\n”);exit(1);}

bzero(&srvaddr, (4));//置空srvaddr

sraddr,SIR_family=AF_INET;

srvaddr,sln_port:htons(PO日T);srvaddr.sin_addr: (5);

//设置套接字结构的各项信息,其中的地址来自域名查询后的hp变量

if(connect(sockfd,(n),sizeof(struct sockaddr))==-1)

{perror("连接失败!\n");exit(1);}

//连接服务器,如果失败则提示用户

if((nbytes=read(sockfd,buf,MAXDATASIZE))=-1)

{perror("读失败!\n");exit(1);}

//从套接字中读出数据

buf[nbytes]='\0';

printf("读到的内容:%s",buf);

CIose(SOCkfd);

//打印数据并关闭套接字

相关热点: 套接字   服务器  

查看答案

相关问题推荐

  • 支持双向的数据流,但并不保证是可靠、有序、无重复的是()。


    A、流套接字B、数据报套接字C、客户端套接字D、服务器端套接字
    查看答案
  • 全面建设社会主义现代化国家,最艰巨最繁重的任务仍然在()
    查看答案
  • 张三为自己投保意外伤害保险,保额10万,张三确定李四为受益人.如果张三因意外伤害死亡后,赔款10万元应支付给()
    A.
    张三的配偶
    B.
    张三的子女
    C.
    李四
    D.
    张三的父母
    查看答案
  • 设备监理阶段可分为()、安装调试阶段、试运行阶段监理
    查看答案
  • 关于基金风险指标的计算
    查看答案
  • 变更签字资料收集都需要那些人
    查看答案