- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
189-实验讲解1 套接字
recv()函数用于从其他机器接收数据,这个函数接收4个参数并返回一个整型值。第1个参数为接收数据所使用的套接字,也就是MySock;第2个参数为用来存储所接收数据的字符串;第3个参数表示希望接收的数据的最大长度,长度应为字符串的长度减1,留下一个字节用于存放结束符;最后一个参数是一个指定函数调用方式的标志。如果使用MSG_PEEK调用这个函数,可以只查看数据而不将数据从缓冲区清除。另一种方式是使用MSG_OOB标志,这个标志用于DECnet协议。该参数最常用的值是0,它将信息移到指定的字符串,并从缓冲区清除。函数的返回值为所接收数据的长度,如果执行失败,则会返回0或一个负数。 page * 实验讲解1 实验讲解1. 套接字 套接字接口最初是由加州大学伯克利分校的Unix小组开发, 是网络应用程序接口(API)。 套接字是由传输层提供的应用程序(进程)和网络之间的接入点。应用程序(进程)可以通过套接字访问网络. IP地址指定主机, 端口号指定应用程序(进程). 套接字利用主机的网络层地址和端口号为两个进程建立逻辑连接。 客户机可以通过端口号来访问服务器提供的服务。 套接字可以用于多种协议,包括TCP/IP协议。 常用端口号: 什么是套接字 (Socket) ? 19: NNTP 20: FTP(数据) 21: FTP(控制) 23: Telnet 25: STMP 80: HTTP 110: POP3 TCP模块 IP模块 接口板 驱动模块 驱动接口 TCP模块 IP模块 接口板 驱动模块 驱动接口 IP模块 接口板 驱动模块 驱动接口 接口板 驱动模块 驱动接口 路由器 传输介质 传输介质 应用程序之间的通信 IP 层的通信 IP 层的通信 数据链路层的通信 数据链路层的通信 应用1 应用2 应用3 逻辑信道 端口号 端口号 套接字使用图示 还要给出IP地址 通信的一方(被动方,称为服务器)监听某个端口. 通信的另一方(主动方,称为客户)如果知道服务器的IP地址和它所监听的端口, 便可以试图发送请求建立连接. 该连接请求包含: (服务器IP地址, 服务器端口号, 客户IP地址,客户端口号) 由于客户端口号由客户端的系统(TCP进程)自动选取一个当前未用的端口, 这个四元组便可以在因特网中唯一标识一个逻辑连接. 如果服务器收到客户端来的连接请求后, 便发出响应建立该连接,这样就建立了一条逻辑信道. 如何利用套接字建立逻辑信道? 然后客户和服务器通过请求响应方式可以进行双向数据传输. 当结束数据传输时, 需要关闭该连接. 这种工作模式是有连接的客户服务器模式(Client/Server) 有状态和无状态:服务器是否记录客户的当前状态? 有连接和无连接:客户和服务器之间是否先建立连接再传输数据? TCP, UDP 循环和并发:服务器对多客户请求的服务是采用循环方法还是并发程序方法? 客户和服务器工作模式分类 (1)创建套接字 SOCKET socket(int domain, int type, int protocol) 参数: 协议簇, 套接字类型,协议簇中的协议号 返回: 新创建的套接字句柄(以下称此套接字为监听套接字) 面向连接的服务器工作流程 domain: 协议簇 PF_INET表示因特网 PF_UNIX表示Unix管道功能 type: 套接字类型 SOCK_STREAM 表示基于连接的字节流方式 SOCK_DGRAM 表示无连接的数据报方式 Protocol: 协议簇中的协议号 可以说明为UNSPEC(unspectified). domain和type已经可以指定一个传输层协议, 如, TCP(domain=PF_INET, type=SOCK_STREAM) UDP (domain=PF_INET, type=SOCK_ DGRAM ) (2)将本地IP地址和端口号绑定到套接字 int bind(SOCKET socket, struct sockaddr * address, int addr_len) 参数: 套接字, 本地地址, 地址长度 返回: 0 (无错时), 或错误码 * 本地地址包括服务器端口号
文档评论(0)