TCP编程Python.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TCP编程 阅读: 36255 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示 “打开了一个网络链接”,而打开一个Socket需要知道 目标计算机的IP地址和端口号,再 指定协议类型即可。 客户端 大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。 举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了 我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。 所以,我们要创建一个基于TCP连接的Socket,可以这样做: # 导入socket库: import socket # 创建一个socket: s socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接: s.connect((, 80)) 创建Socket时,AF_INET指定使用IPv4协议,如果要用更先进的IPv6,就指定为AF_INET6。SOCK_STREAM指定使用面向流的TCP协议,这样,一个Socket对 象就创建成功,但是还没有建立连接。 客户端要主动发起TCP连接,必须知道服务器的IP地址和端口号。新浪网站的IP地址可以用域名 自动转换到IP地址,但是怎么知道新浪服 务器的端口号呢? 答案是作为服务器,提供什么样的服务,端口号就必须固定下来。由于我们想要访问网页,因此新浪提供网页服务的服务器必须把端口号固定在80端口, 因为80端口是Web服务的标准端口。其他服务都有对应的标准端口号,例如SMTP服务是25端口,FTP服务是21端口,等等。端口号小于1024的是Internet标 准服务的端口,端口号大于1024的,可以任意使用。 因此,我们连接新浪服务器的代码如下: s.connect((, 80)) 注意参数是一个tuple,包含地址和端口号。 建立TCP连接后,我们就可以向新浪服务器发送请求,要求返回首页的内容: # 发送数据: s.send(bGET / HTTP/1.1\r\nHost: \r\nConnection: close\r\n\r\n) TCP连接创建的是双向通道,双方都可以同时给对方发数据。但是谁先发谁后发,怎么协调,要根据具体的协议来决定。例如,HTTP协议规定客户端必须先 发请求给服务器,服务器收到后才发数据给客户端。 发送的文本格式必须符合HTTP标准,如果格式没问题,接下来就可以接收新浪服务器返回的数据了: # 接收数据: buffer [] while True: # 每次最多接收1k字节: d s.recv (1024) if d: buffer.append(d) else: break data b.join (buffer) 接收数据时,调用recv (max)方法,一次最多接收指定的字节数,因此,在一个while循环中反复接收,直到recv ()返回空数据,表示接收完毕,退出循 环。 当我们接收完数据后,调用close()方法关闭Socket,这样,一次完整的网络通信就结束了: # 关闭连接: s.close() 接收到的数据包括HTTP头和网页本身,我们只需要把HTTP头和网页分离一下,把HTTP头打印出来,网页内容保存到文件: header, html data.split(b\r\n\r\n, 1) print(header.decode(utf-8)) # 把接收的数据写入文件: with open (sina.html, wb) as f: f.write(html) 现在,只需要在浏览器中打开这个sina.html文件,就可以看到新浪的首页了。 服务器 和客户端编程相比,服务器编程就要复杂一些。 服务器进程首先要绑定一个端口并监听来自其他客户端的连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的通信就靠这个 Socket连接了。 所以,服务器会打开固定端口 (比如80)监听,每来一个客户端连接,就创建该Socket连接。由于服务器会有大量来自客户端的连接,所以,服务器要能 够区分一个Socket连接是和哪个客户端绑定的。一个Socket依赖4项:服务器地址、服务器端口、客户端地址、客户端端口来唯一确定一个Socket。 但是服务器还需要同时响应多个客户端的请求,所以,每个连接都需要一个新的

文档评论(0)

00625 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档