2022年Python的Socket编程教程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年Python的Socket编程教程 .pdf》由会员分享,可在线阅读,更多相关《2022年Python的Socket编程教程 .pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、这是用来快速学习Python Socket 套接字编程的指南和教程。Python 的 Socket 编程跟C 语言很像。Python 官方关于Socket 的函数请看http:/docs.python.org/library/socket.html基本上,Socket 是任何一种计算机网络通讯中最基础的内容。例如当你在浏览器地址栏中输入 时,你会打开一个套接字,然后连接到 并读取响应的页面然后然后显示出来。而其他一些聊天客户端如gtalk 和 skype 也是类似。任何网络通讯都是通过Socket 来完成的。写在开头本教程假设你已经有一些基本的Python 编程的知识。让我们开始Socket
2、编程吧。创建 Socket 首先要做的就是创建一个Socket,socket 的 socket 函数可以实现,代码如下:?Code 1 2 3 4 5 6 7 8#Socket client example in pythonimportsocket#for sockets#create an AF_INET,STREAM socket(TCP)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)printSocket Created函数socket.socket 创建了一个Socket,并返回Socket 的描述符可用于其他Socket 相关的
3、函数。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 17 页 -上述代码使用了下面两个属性来创建Socket:地址簇:AF_INET(IPv4)类型:SOCK_STREAM(使用TCP 传输控制协议)错误处理如果socket 函数失败了,python 将抛出一个名为socket.error 的异常,这个异常必须予以处理:?Code 1 2 3 4 5 6 7 8 9 10 11 12 13#handling errors in python socket programsimportsocket#for socketsimportsys#for exittry:#create
4、an AF_INET,STREAM socket(TCP)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)except socket.error,msg:printFailed to create socket.Error code:+str(msg 0)+,Error message:+msg sys.exit();printSocket Created好了,假设你已经成功创建了Socket,下一步该做什么呢?接下来我们将使用这个Socket 来连接到服务器。注意与 SOCK_STREAM 相对应的其他类型是SOCK_DGRAM 用于UDP
5、 通讯协议,UDP 通讯是非连接Socket,在这篇文章中我们只讨论SOCK_STREAM,或者叫TCP。连接到服务器名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 17 页 -连接到服务器需要服务器地址和端口号,这里使用的是 和 80 端口。首先获取远程主机的IP 地址连接到远程主机之前,我们需要知道它的IP 地址,在Python 中,获取IP 地址是很简单的:?Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 importsocket#for socketsimportsys#for exittr
6、y:#create an AF_INET,STREAM socket(TCP)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)except socket.error,msg:printFailed to create socket.Error code:+str(msg 0)+,Error message:+msg sys.exit();printSocket Createdhost=try:remote_ip=socket.gethostbyname(host)except socket.gaierror:#could not resolv
7、eprintHostname could not be resolved.Exiting sys.exit()printIp address of+host+is+remote_ip 我们已经有IP 地址了,接下来需要指定要连接的端口。代码:?Code 1 i mport socket#for sockets名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 17 页 -2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 importsys#for exittry:#create an
8、 AF_INET,STREAM socket(TCP)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)except socket.error,msg:printFailed to create socket.Error code:+str(msg 0)+,Error message:+msg sys.exit();printSocket Createdhost=port=80try:remote_ip=socket.gethostbyname(host)except socket.gaierror:#could not resolveprin
9、tHostname could not be resolved.Exiting sys.exit()printIp address of+host+is+remote_ip#Connect to remote servers.connect(remote_ip,port)printSocket Connected to+host+on ip+remote_ip 现在运行程序?1 2 3 4$python client.py Socket Created Ip address of is 61.145.122.155 Socket Connected to on ip 61.145.122.15
10、5 这段程序创建了一个Socket 并进行连接,试试使用其他一些不存在的端口(如 81)会是怎样?这个逻辑相当于构建了一个端口扫描器。已经连接上了,接下来就是往服务器上发送数据。免费提示名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 17 页 -使用SOCK_STREAM/TCP 套接字才有“连接”的概念。连接意味着可靠的数据流通讯机制,可以同时有多个数据流。可以想象成一个数据互不干扰的管道。另外一个重要的提示是:数据包的发送和接收是有顺序的。其他一些Socket 如 UDP、ICMP 和 ARP 没有“连接”的概念,它们是无连接通讯,意味着你可从任何人或者给任何人发送和接收数据
11、包。发送数据sendall 函数用于简单的发送数据,我们来向oschina 发送一些数据:?Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 importsocket#for socketsimportsys#for exittry:#create an AF_INET,STREAM socket(TCP)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)except socket.error,msg:printFailed to create sock
12、et.Error code:+str(msg 0)+,Error message:+msg sys.exit();printSocket Createdhost=port=80try:remote_ip=socket.gethostbyname(host)except socket.gaierror:#could not resolveprintHostname could not be resolved.Exiting sys.exit()printIp address of+host+is+remote_ip 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 17 页 -26
13、27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42#Connect to remote servers.connect(remote_ip,port)printSocket Connected to+host+on ip+remote_ip#Send some data to remote servermessage=GET/HTTP/1.1rnrntry:#Set the whole string s.sendall(message)except socket.error:#Send failedprintSend failed sys.exit(
14、)printMessage send successfully上述例子中,首先连接到目标服务器,然后发送字符串数据GET/HTTP/1.1rnrn,这是一个HTTP 协议的命令,用来获取网站首页的内容。接下来需要读取服务器返回的数据。接收数据recv 函数用于从socket 接收数据:?Code 1 2 3 4 5 6 7 8 9 10 11 12#Socket client example in pythonimportsocket#for socketsimportsys#for exit#create an INET,STREAMing sockettry:s=socket.socket
15、(socket.AF_INET,socket.SOCK_STREAM)except socket.error:printFailed to create socket sys.exit()名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 17 页 -13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 printSocket Createdhost=;port=80;try:remote_ip=socket.gethostbyn
16、ame(host)except socket.gaierror:#could not resolveprintHostname could not be resolved.Exiting sys.exit()#Connect to remote servers.connect(remote_ip,port)printSocket Connected to+host+on ip+remote_ip#Send some data to remote servermessage=GET/HTTP/1.1rnHost:rnrntry:#Set the whole string s.sendall(me
17、ssage)except socket.error:#Send failedprintSend failed sys.exit()printMessage send successfully#Now receive datareply=s.recv(4096)printreply 下面是上述程序执行的结果:?Code 1 2 3 4$python client.py Socket Created Ip address of is 61.145.122.Socket Connected to on ip 61.145.122.155 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共
18、17 页 -5 6 7 8 9 10 11 12 13 Message send successfully HTTP/1.1 301 Moved Permanently Server:nginx Date:Wed,24 Oct 2012 13:26:46 GMT Content-Type:text/html Content-Length:178 Connection:keep-alive Keep-Alive:timeout=20 Location:http:/ 回应了我们所请求的URL 的内容,很简单。数据接收完了,可以关闭Socket 了。关闭 socket close 函数用于关闭Soc
19、ket:?Code 1 s.close()这就是了。让我们回顾一下上述的示例中我们学到了如何:1.创建Socket 2.连接到远程服务器3.发送数据4.接收回应当你用浏览器打开 时,其过程也是一样。包含两种类型,分别是客户端和服务器,客户端连接到服务器并读取数据,服务器使用Socket 接收进入的连接并提供数据。因此在这里 是服务器端,而你的浏览器是客户端。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 17 页 -接下来我们开始在服务器端做点编码。服务器端编程服务器端编程主要包括下面几步:1.打开socket 2.绑定到一个地址和端口3.侦听进来的连接4.接受连接5.读写数据我
20、们已经学习过如何打开Socket 了,下面是绑定到指定的地址和端口上。绑定 Socket bind 函数用于将Socket 绑定到一个特定的地址和端口,它需要一个类似connect 函数所需的sockaddr_in 结构体。示例代码:?Code 1 2 3 4 5 6 7 8 9 10 11 importsocket importsys HOST=#Symbolic name meaning all available interfacesPORT=8888#Arbitrary non-privileged ports=socket.socket(socket.AF_INET,socket.S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Python的Socket编程教程 2022 Python Socket 编程 教程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内