1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
python socket.doc

TCP socket 在互联网上,我们可以让某台计算机作为服务器。服务器开放自己的端口,被动等待其他计算机连接。当其他计算机作为客户,主动使用socket连接到服务器的时候,服务器就开始为客户提供服务。 在Python中,我们使用标准库中的socket包来进行底层的socket编程。 首先是服务器端,我们使用bind()方法来赋予socket以固定的地址和端口,并使用listen()方法来被动的监听该端口。当有客户尝试用connect()方法连接的时候,服务器使用accept()接受连接,从而建立一个连接的socket: # Written by Vamei# Server side import socket HOST = PORT = 8000 reply = Yess = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(3) conn, addr = s.accept() request = conn.recv(1024) print request is: ,request print Connected by, addr conn.sendall(reply) conn.close() socket.socket()创建一个socket对象,并说明socket使用的是IPv4(AF_INET,IP version 4)和TCP协议(SOCK_STREAM)。 然后用另一台电脑作为客户,我们主动使用connect()方法来搜索服务器端的IP地址(在Linux中,你可以用$ifconfig来查询自己的IP地址)和端口,以便客户可以找到服务器,并建立连接: # Written by Vamei# Client side import socket HOST = 55PORT = 8000 request = can you hear me? s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.sendall(request) reply = s.recv(1024) print reply is: ,reply s.close() 在上面的例子中,我们对socket的两端都可以调用recv()方法来接收信息,调用sendall()方法来发送信息。这样,我们就可以在分处于两台计算机的两个进程间进行通信了。当通信结束的时候,我们使用close()方法来关闭socket连接。 (如果没有两台计算机做实验,也可以将客户端IP想要connect的IP改为,这是个特殊的IP地址,用来连接当地主机。) 3. 基于TCP socket的HTTP服务器: 上面的例子中,我们已经可以使用TCP socket来为两台远程计算机建立连接。然而,socket传输自由度太高,从而带来很多安全和兼容的问题。我们往往利用一些应用层的协议(比如HTTP协议)来规定socket使用规则,以及所传输信息的格式。 HTTP协议利用请求-回应(request-response)的方式来使用TCP socket。客户端向服务器发一段文本作为request,服务器端在接收到request之后,向客户端发送一段文本作为response。在完成了这样一次request-response交易之后,TCP socket被废弃。下次的request将建立新的socket。request和response本质上说是两个文本,只是HTTP协议对这两个文本都有一定的格式要求。 request-response cycle 现在,我们写出一个HTTP服务器端: # Written by Vamei import socket HOST = PORT = 8000 text_content = HTTP/1.x 200 OK Content-Type: text/html head titleWOW/title /head html pWow, Python Server/p IMG src=test.jpg/ /html f = open(test.jpg,rb) pic_content = HTTP/1.x 200 OK Content-Type: image/jpg pic_content = pic_content + f.read() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT))

文档评论(0)

wfkm + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档