Python 网络编程与多线程编程-学习总结
3.1.1 Python 网络编程
Python 网络编程主要基于 socket 实现,socket 在本质上与文件句柄、文件
描述符、管道描述符等都是一个概念,都可以对其进行 I/O 处理。主要将介绍
TCP 方式和 UDP 方式的 Python 网络编程。
(1)TCP 方式
无论是 TCP 方式还是 UDP 方式,都有一个 server 端和 client 端,server
端负责监听 client 端的连接请求并处理。
server 端
server 端绑定一个 IP 和端口号后便对绑定的地址进行监听,server 端的
socket 建立过程一般为:
1. 建立一个 socket(可以选择 socket 类型 INET、UNIX 等,以及连接方式
TCP/UDP)
2. 使用 bind 公开一个端口,使得 client 可以方便连接
3. 设置一个 listen 队列的大小
4. 进入一个无限循环,在此无限循环中,使用 accept 函数来等待客户连接,
此函数返回一个新的 socket 和列表形式的地址(包括 client 端的 IP
地址和端口号),返回的 socket 对应于客户端的 socket,这就相当于
server 端和 client 端拿到了同一个文件句柄,从而建立了通信连接。
对 socket 的处理一般放在外部单独的函数中,并且通常开一个新线程来
处理这个任务
5. 通过 send()/recv()来对 socket 进行读写操作
一个 Python 实现的简单 TCP server 端的程序如下所示:
def tcpServer():
srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
srvsock.bind(('202.115.36.112', 9527))
srvsock.listen(5)
while True:
clisock, (remoteHost, remotePort) = srvsock.accept()
print "[%s:%s] connected" % (remoteHost, remotePort)
#do something on the clisock
clisock.close()
if __name__ == "__main__":
tcpServer()
client 端
client 端的作用是建立一个新的 TCP socket 用来与 server 进行交互,
client 端的 socket 建立过程一般为:
1. 建立一个新的 socket
2. 使用 connect 函数与远程主机获得连接
3. 对 socket 进行读写操作