计算机网络编程 第四讲 套接字APIPPT
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP/IP的地址定义
struct sockaddr_in { u_char sin_len; u_short sin_family; u_short sin_port;//2B struct in_addr sin_addr;//4B char sin_zero[8];//8B } IP专用的结构
电子科大计算机学院 计算机网络编程
套接字API的主要系统调用
套接字调用分为两组: 主调用:提供下层功能的访问 实用例程:提供帮助
套接字调用带有参数,允许以多种方式来使用它们。 可被客户或效劳器使用 可被TCP或UDP使用 可使用特定或非特定的远程端点地址
电子科大计算机学院 计算机网络编程
进程的文件描述符表
(一个进程一张)
0: 1: 2: 3:
用于文件0的内部数据结构 用于文件1的内部数据结构 用于文件2的内部数据结构
用于文件3的内部数据结构
电子科大计算机学院 计算机网络编程
套接字概要——针对套接字的数 据构造
调用socket将创立一个新的描述符条目 构造的许多字段是其他的系统调用来填
方法一:定义专门支持TCP/IP通信的一些函数 方法二:定义支持一般网络通信的函数,用参数使
TCP/IP通信作为一种特例 Berkeley套接字使用第二种方法,具有通用性,
TCP/IP是一个族PF_INET 另外,应用程序知名使用效劳的类型,而不是指定
协议名 争论: 通用性没有必要,使应用程序难以阅读 通用性可以使程序员免于了解协议族的细节
支持TCP/IP。 这个系统被称为BSD UNIX (Berkeley Software
Distribution),成为事实上的标准 1981提出于BSD4.1 UNIX,本书基于BSD4.4 版本
电子科大计算机学院 计算机网络编程
指明一个协议接口
考虑:接口是专门针对TCP/IP协议, 还是可以为其 它协议所用呢?
controlled by operating system
host or server
电子科大计算机学院 计算机网络编程
Berkeley套接字
来自UNIX系统 Berkeley套接字 ARPA要求伯克利分校将TCP/IP移植到UNIX中 需要创立一个接口,便于应用程序使用这个接口 进
展网络通信 尽可能使用现有的系统调用,同时添加新的系统调用
协议〕 请创立一个用于TCP通信的套接字。 举例:s=socket(PF_INET,SOCK_STREAM,0)
电子科大计算机学院 计算机网络编程
int bind(int sockfd,struct sockaddr * my_addr,int addrlen)
功能:为套接字指明一个本地端点地址 TCP/IP协议使用sockaddr_in构造,包含IP地址
《计算机网络编程》
第四讲 套接字API
目录
套接字的概念 Berkeley套接字 套接字概要 套接字主要系统调用 用于整数转换的函数调用 在程序中使用套接字调用 套接字调用参数相关的符号常量
电子科大计算机学院 计算机网络编程
socket
什么是套接字
1. 套接字是一个主机本地应用程序所创建的, 为操作系 统所控制的接口 (“门”) . 2. 应用进程通过这个接口,使用传输层提供的服务, 跨网 络发送(或接收)消息. 3.Client/server模式的通信接口——套接字接口.
电子科大计算机学院 计算机网络编程
类属地址构造
套接字系统定义的一般化的地址构造 〔地址族,该族的端点地址〕
套接字的普通C定义结 构
struct sockaddr {
u_char sa_len; u_short sa_family;
char sa_data[14];//14B }通用的地址结构(只是很 适用于AF_INET族中的地 址)
由应用程序 开发者控制
由操作系统控制
process
socket TCP with buffers, variables
host or server
internet
process
socket TCP with buffers, variables
controlled by application developer
和端口号 效劳器使用它来指明熟知的端口号,然后等待连
接 参数说明: Sockfd:套接字描述符,指明创立连接的套接字 my_addr:本地地址,IP地址和端口号 addrlen :地址长度 举例:bind(sockfd, (struct sockaddr
描述符表
(一个进程一张)
0: 1: 2: 3: 4:
family: PF_INET service: SOCK_STREAM Local IP: Remote IP: Local port: Remote port:
:
ቤተ መጻሕፍቲ ባይዱ
电子科大计算机学院 计算机网络编程
套接字概要——主动套接字和被动 套接字
创立方式一样,使用方式不同 等待传入连接的套接字——被动,如效劳器套接字 发起连接的套接字——主动,如客户套接字 指明端点地址:创立时不指定,使用时指明 TCP/IP需要指明协议端口号和IP地址 TCP/IP协议族和地址族的对应: TCP/IP协议族:PF_INET 对应的TCP/IP的地址族:AF_INET
一些主调用的套接字API:
int Socket( int domain, int type, int protocol) 功能:创立一个新的套接字,返回套接字描述符 参数说明: domain:域类型,指明使用的协议栈,如TCP/IP使用
的是 PF_INET type: 指明需要的效劳类型, 如 SOCK_DGRAM: 数据报效劳,UDP协议 SOCK_STREAM: 流效劳,TCP协议 protocol:一般都取0〔由系统根据效劳类型选择默认的
电子科大计算机学院 计算机网络编程
套接字概要——套接字描述符
文件描述符:进程的文件描述符表的下标。OS中每个进程 对应一个文件描述符表,表中每个元素指向和文件相对应的 一个内部的数据构造。
套接字和文件类似,每个活动套接字使用一个小整数标识, 进程的文件描述符和套接字描述符值不能一样
socket函数:创立套接字,返回描述符〔不是open函数〕