Mayuyu学习Python很久了,今天就开始学习Python的网络编程。
其实说到网络编程,就必须提到一个关键词---“套接字”,即Socket。网络化的应用程序在开始任何通讯之前都需
要创建套接字,就像电话插口一样,没有它就没有办法进行通讯。对于套接字来说,一般分为两种:基于文件型和基
于网络型。套接字实质上就是一个通信端点。当然,我们可以创建面向连接的套接字或者面向无连接的套接字,分别
对应TCP协议和UDP协议。
在网络编程中,都是基于C/S模式的,所以分为客户端和服务端。接下来学习利用Python编写最简单的Socket。
先来看基于TCP的Socket:
服务端
#Server from socket import* from time import ctime HOST = ‘222.27.174.90‘ PORT = 21511 BUFSIZE = 1024 ADDR = (HOST,PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) while True: tcpCliSock, addr = tcpSerSock.accept() while True: data = tcpCliSock.recv(BUFSIZE) if not data: break print ‘%s‘ %(ctime()) print data tcpCliSock.send(‘[%s]\n %s‘ %(ctime(), data)) tcpSerSock.close()
客户端
from socket import * HOST = ‘222.27.174.90‘ PORT = 21511 BUFSIZE = 1024 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET,SOCK_STREAM) tcpCliSock.connect(ADDR) while True: data = raw_input(‘>‘) if not data: continue tcpCliSock.send(data) data = tcpCliSock.recv(BUFSIZE) print data tcpCliSock.close()
服务端和客户端的HOST与PORT一定要相同才行。
基于UDP的Socket:
服务端:
#Server from socket import* from time import ctime HOST = ‘222.27.174.90‘ PORT = 21512 BUFSIZE = 1024 ADDR = (HOST,PORT) udpSerSock = socket(AF_INET, SOCK_DGRAM) udpSerSock.bind(ADDR) while True: data, addr = udpSerSock.recvfrom(BUFSIZE) print ‘%s‘ %(ctime()) print data udpSerSock.sendto(‘[%s]\n %s‘ %(ctime(), data), addr) udpSerSock.close()
客户端:
from socket import * HOST = ‘222.27.174.90‘ PORT = 21512 BUFSIZE = 1024 ADDR = (HOST, PORT) udpCliSock = socket(AF_INET,SOCK_DGRAM) while True: data = raw_input(‘>‘) if not data: continue udpCliSock.sendto(data, ADDR) data, ADDR = udpCliSock.recvfrom(BUFSIZE) print data udpCliSock.close()
接下来学习一些套接字对象的常用函数。。。
(1)服务端套接字函数
s.bind() 绑定地址(主机名,端口)到套接字
s.listen() 开始TCP监听
s.accept() 被动接受TCP客户端连接,(阻塞式等待连接的到来)
(2)客户端套接字函数
s.connect() 主动初始化TCP服务器连接
s.connect_ex() connect)()函数的扩展版本,出错时返回出错码,而不是抛出异常
(3)公共用途的套接字函数
s.recv() 接收TCP数据
s.send() 发送TCP数据
s.sendall() 完整发送TCP数据
s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
时间: 2024-10-20 18:52:10