Web Server是基于Socket编程,又称之为网络编程,socket是网络编程接口,socket可以建立网络连接,读数据,写数据。socket模块定义了一些常量参数,用来指定socket的的地址族、socket的类型、以及支持的TCP/IP协议。
有一篇写的比较详细的关于HTTP协议请求过程和socket的文章,链接:http://www.admin10000.com/document/9347.html
简单实例测试socket, 代码如下:
1 from socket import socket, AF_INET, SOCK_STREAM 2 from threading import Thread 3 4 port = 50008 5 host = 'localhost' 6 7 def server(): 8 # 建立tcp连接 9 sock = socket(AF_INET, SOCK_STREAM) 10 # 绑定本机和端口 11 sock.bind(('', port)) 12 # 监听,允许连接的客户数量 13 sock.listen(5) 14 while True: 15 # 等待客户端连接 16 conn, addr = sock.accept() 17 # 读取客户端请求的字节数据 18 data = conn.recv(1024) 19 # 响应请求给客户端 20 reply = 'server got [%s]' % data 21 conn.send(reply.encode()) 22 23 def client(name): 24 sock = socket(AF_INET, SOCK_STREAM) 25 sock.connect((host, port)) 26 sock.send(name.encode()) 27 reply = sock.recv(1024) 28 sock.close() 29 print('client got [%s]' % reply) 30 31 if __name__ == '__main__': 32 sthread = Thread(target=server) 33 sthread.daemon = True 34 sthread.start() 35 for i in range(5): 36 Thread(target=client, args=('client%s' % i, )).start()
运行结果如下:
1 client got [b"server got [b'client0']"] 2 client got [b"server got [b'client1']"] 3 client got [b"server got [b'client2']"] 4 client got [b"server got [b'client3']"] 5 client got [b"server got [b'client4']"]