如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
网络编程技术主要内容思考题2.1UNIX套接字网络编程接口的产生与发展套接字简要介绍套接字的起源套接字的起源套接字的实现两种实现的区别2.1.4套接字通信与UNIX操作系统的输入/输出用户进程与网络协议的交互,实际要比用户进程与传统I/O设备的交互复杂得多。仅提供open、read、write、close四个过程远不够使用套接字的应用程序必须说明许多细节。应用程序使用的协议簇、远程计算机的地址、该应用程序是客户机还是服务器、希望的服务类型是面向连接的还是无连接的,等等。为了提供这些细节,每个套接字有许多参数与选项,需要应用程序提供具体值。为避免单个套接字函数参数过多,套接字编程接口的设计者定义了多个函数。例如,创建套接字时,先调用一个函数创建套接字,再调用其它函数说明使用套接字的细节。2.2套接字编程的基本概念图2.2应用进程、套接口、网络协议栈及操作系统的关系从多个层面来理解套接字这个概念的内涵从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议栈进行通信的接口,是应用程序与网络协议栈交互的接口.从实现的角度来讲,非常复杂。套接字是一个复杂的软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。从使用的角度来讲,非常简单。对套接字的操作形成了一种网络应用程序的编程接口(API),提供了一组系统调用或库函数,可以用于构造套接字、安装绑定套接字、连接套接字、通过套接字交换数据、关闭套接字,实现各种分布式应用。套接字编程接口是一套操作套接字的编程接口函数,套接字是它的操作对象。2.2.2套接字的特点图2.3在Internet通信域中,数据报套接字基于UDP协议图2.4在Internet通信域中,流式套接字基于TCP协议2.2.3套接字的应用场合2.2.4套接字使用的数据类型和相关的问题(2)sockaddr_in结构:专门针对Internet通信域,存储套接字相关的网络地址信息,例如IP地址,传输层端口号等信息。structsockaddr_in{u_charsa_len;//地址总长u_charsin_family;//地址家族,为AF_INETu_shortsin_port;//端口号,2字节structin_addrsin_addr;//IP地址,4字节charsin_zero[8];//未用,全为0,8字节}(3)in_addr结构:专门用来存储IP地址structin_addr{unsignedlongs_addrl;}(4)这些数据结构的一般用法首先,定义一个sockaddr_in的结构实例,并将它清零。structsockaddr_inmyad;memset(&myad,0,sizeof(structsockaddr_in));然后,为这个结构赋值。myad.sin_family=AF_INET;myad.sin_port=htons(8080);myad.sin_addr.s_addr=htonl(INADDR-ANY);第三步,在函数调用中使用时,将这个结构强制转换为sockaddr类型。listen(listenfd,(sockaddr*)(&myad),&addrlen);思考题2.3面向连接的套接字编程1.创建套接字socket()socket()向应用程序提供创建套接字的手段。其调用格式如下:#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol);参数:domain(套接字使用的协议族):AF_INET,AF_UNIX,AF_IPX,…type(类型):SOCK_STREAM,SOCK_DGRAMprotocol(协议):0-让系统使用指定类型和协议族上的默认协议。返回值:一个整型套接字号(文件描述符),-1表示出错。socket()举例2.绑定套接字到指定的地址bind()bind()举例3.启动监听listen()connect(),accept()connect()试图建立实际连接/*先创建本地socket,存放在csockfd再定义服务器的IP和服务端口,使用结构structsockaddr_in,存放在server_addr,使用时强制转换为structsockaddr*/if(connect(csockfd,(structsockaddr*)(&server_addr),sizeof(structsockaddr))<0){/*报错,并退出*/}/*成功返回0,失败返回-1*/intclientfd;/*定义返回的套接字文件描述符*/intaddr