网络软件设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2、服务器软件设计 创建流式套接字 将该socket与一个本地地址联系起来 将该socket置于监听状态 接受一个入连接 接收数据
将一个socket置于监听状态 将一个socket置于监听状态 int listen ( SOCKET s , (IN) IN) int backlog (IN) IN) )
作用: 将一个socket置于监听状态,以便接受入连接。 参数: s:需置于监听状态的socket,为一个已绑定、未连接的 socket。 backlog:可接受连接的最大数目。(SOMAXCONN)
接受一个入连接 SOCKET accept ( SOCKET s, SOCKADDR *addr , int *addrlen )
3、以点分十进制表示的IP地址字符串与32位 以点分十进制表示的IP地址字符串与32位 网络字节序的二进制值之间的转化 unsigned long inet_addr (constant char *cp); char * inet_ntoa ( IN_ADDR in); 作用 参数 返回值
4、32位整数、16位整数主机字节序与网络字 32位整数、16位整数主机字节序与 节序的转换 节序的转换 u_long htonl ( u_long hostlong) ; u_short htons ( u_short hostshort) ; u_long ntohl ( u_long netlong) ; u_short ntohs ( u_short netlong) ;
与一个指定的socket建立连接。 根据该函数的返回值来判断连接的建立是否成功。
发送数据 int send ( SOCKET s, constant char *buf , int len , int flags ); 作用:
(IN) (IN) (IN) (IN)
在一个已连接的socket上发送数据。
struct sockaddr_in { short unsigned short struct in_addr char }; typedef struct sockaddr SOCKADDR; sin_family; sin_port; sin_addr; sin_zero[8];
二、创建一个接口 SOCKET socket ( int af; af; /*协议族* /*协议族*/ type; /*所要建立的SOCKET的类型* /*所要建立的SOCKET的类型*/ int type; int protocol; /*SOCKET所使用的特定协议*/ protocol; /*SOCKET所使用的特定协议* )
第二章 Socket程序设计的一般方法 Socket程序设计的一般方法
Server的设计 Client的设计 采用无连接的通信服务 采用面向连接的通信服务
一、地址 在网络中唯一标识一个应用进程: IP地址 + 运输层协议 + 端口号 1、IP地址的表示 struct in_addr IN_ADDR
上机实验要求: 熟悉IN_ADDR 熟悉IN_ADDR , SOCKADDR, SOCKADDR_IN结构,并会使用。 SOCKADDR_IN结构,并会使用。 熟悉并学会使用如下的函数: ntohs , ntohl , htons , htonl , inet_addr() , inet_ntoa() 熟悉client端、server端软件设计所需要用到的标 熟悉client端、server端软件设计所需要用到的标 准socket函数: socket函数: WSAStartup() , WSACleanup() socket() , sendto() bind() , recvfrom() 正确设计client和server软件 正确设计client和server软件 完成编译、链接,得到运行结果
struct in_addr { union { S_un_b; struct { u_char s_b1,s_b2,s_b3,s_b4;} S_un_b; struct { u_short s_w1,s_w2;} S_un_w; S_un_w; ulong S_addr; S_addr; } S_un; }; typedef struct in_addr IN_ADDR;
四、使用TCP提供传输服务的上层应用 四、使用TCP提供传输服务的上层应用 1、客户机软件设计 创建流式套接字
填写目的地址
与服务器建立连接
发送数据
与服务器建立连接 int connect ( SOCKET constant SOCKADDR int ); 作用:
s, IN *name, IN namelen IN
s, *buf, *buf, len, len, flags, flags,
(IN) (OUT) (IN) (IN)
与recvfrom进行比较,接收方的地址在何时 获得?
五、深入讨论套接字 1、从两个方面来讨论套接字: 套接字描述符 套接口结构
struct socket{ short so_type; so_type; short so_option; short so_linger; short so_state; so_state; so_pcb; so_pcb; caddr_t struct protosw *so_proto; struct socket *so_head; struct socket *so_q0; *so_q0; *so_q; *so_q; struct socket short so_q0len; short so_qlen; short so_qlimit; short so_timeo; u_shurt so_error pid_t so_pgid;
操作系统提供了应用程序与协议软件的接口。 大多数操作系统采用系统调用机制来提供该服务。
应用 程序1
应用 程序n
在用户地址空间 中的应用程序
被应用程序调用的系统函数 包括TCP/IP协议软 件的操作系统内核
系统调用接口 系统地址中的 协议软件
三、socket接口 三、socket接口 1、什么是socket? 、什么是socket? 2、接口应具备哪些功能?
2、套接字描述符和套接口结构的关系 系统通过套接字描述符来寻找套接口结构。
关系映射
索引id 索引id
socketid
3、两个问题: Q:套接字描述符是局部分配的还是全局分配 的?
局部分配的 同一个进程同时不可能获得两个相同的套接字描述符 不同的进程同时可能获得相同的套接字描述符。
Q:套接口结构是局部管理的还是全局管理的?
2、服务器软件设计 创建数据报式套接字
将该socket与一个本地地址联系起来
在指定的socket上等待接收数据
处理接收到的数据
将socket与一个本地地址联系起来: socket与一个本地地址联系起来: 填写本地地址 绑定 int bind ( SOCKET s, constant SOCKADDR *name, *name, namelen int );
2、网络字节序与主机字节序 主机字节序( 主机字节序(host byte order):计算机存放 order):计算机存放 多字节值的顺序。 little – endian:起始地址存放低位字节。 big – endian:起始地址存放高位字节。 网络字节序( 网络字节序(network byte order):TCP/IP中 order):TCP/IP中 对协议首部所使用的多字节值指明了一种标 准的表示方法。
接收数据 int recvfrom ( s, SOCKET char *buf, *buf, int len, len, int flags, flags, SOCKADDR *from, *from, int *fromlen *fromlen );
(IN) (OUT) (IN) (IN) (OUT) (IN/OUT)
参数: s:一个已处于监听状态的socket。 返回值:
(IN) (OUT) (OUT)
无错——一个新建立的socket的标识,真正的连接是建立 在其上的,client与server就是通过它来进行数据交换。 有错——INVALID_SOCKET。
接收数据 int recv ( SOCKET char int int ); 注意:
5、通信端点(Communication endpoint) 、通信端点(Communication endpoint) IP地址 + 端口号 struct sockaddr { u_short char }; typedef struct sockaddr SOCKADDR; sa_family; sa_data[14];
三、使用UDP提供传输服务的上层应用 三、使用UDP提供传输服务的上层应用 1、客户机设计 创建数据报式套接字
填写目的地址
发送数据
发送数据 int sendto ( s, SOCKET constant char *buf, *buf, int len, len, int flags, flags, SOCKADDR *to, *to, int tolen );
套接口结构
u_long so_oobmark; struct sockbuf so_rcv, so_snd; so_snd; caddr_t so_tpcb; void (*so_upcall)(struct socket *so, caddr_t arg, int waitf); caddr_t so_upcallarg; } 在套接口结构中包含了为用户提供通信服务的各种 信息。
网络软件设计
第一章 绪论
一、TCP/IP网络分层模型 一、TCP/IP网络分层模型 应用层 运输层 网络层 网络接口层 虚通信 实通信 服务 透明性
二、TCP/IP协议栈 二、TCP/IP协议栈
SMTP
F T P
TELNET
D N S
SN MP
TCP IP
UDP
硬件协议(链路控制&介质访问)
本课程所需要解决的问题: 应用程序如何来使用下层为其提供的通信 服务? 标准应用服务 应用服务 非标准应用服务
为通信分配本地资源 完成数据的传输 产生、处理紧急数据 处理异常情况
Baidu Nhomakorabea
Q:应用服务对等实体之间怎样建立信息交互 的模式? A:客户机/服务器模式。 客户机/ 四、C/S模式 1、为什么要采用C/S模式? 从建立网络的起因来看 为解决聚集问题
2、基本概念和术语 Q:从什么方面来区分Client和Server? A:按应用程序是等待通信还是发起通信。 Server —— 等待通信。 Client —— 发起通信。 注意: Server和Client都是指一个程序,而不是指一 块硬件。
注意: 注意: 在使用所有的系统调用之前,必须先进行初 始化。 int WSAStartup ( WORD wVersionReqused , (IN) LPWSADATA lpWSAData (OUT) )
需求分析: Client端 Client端:成功实现一次数据的发送,将一个 字符串发送给一个指定的Server。 字符串发送给一个指定的Server。 Server端 Server端:成功实现一次数据的接收,并显示 出如下的一些数据: 发送方的IP地址 发送方的IP地址 发送方的端口号 所接收数据的内容 所接收数据的长度
全局管理的。 TCP层实体面向系统所有应用进程。 TCP层实体面向系统所有应用进程。
套接口与套接字描述符
进程1 进程1
进程2 进程2
进程3 进程3
套接口 结构 TCP
Q:TCP实体依据什么处理接收的报文? TCP实体依据什么处理接收的报文 实体依据什么处理接收的报文? A:报文中的端口信息。 报文中的端口信息。 Q:TCP实体如何处理报文? TCP实体如何处理报文 实体如何处理报文? A:将报文挂在与端口绑定的套接口接收队列中。 将报文挂在与端口绑定的套接口接收队列中。 Q:用户进程如何获取报文? 用户进程如何获取报文? A:从套接口的接收队列中取得报文。 从套接口的接收队列中取得报文。
相关文档
最新文档