python 网络编程socketserver原理示例

socketserver实现多客户端与服务端交互就是用到了多线程,python也帮我们提供了多线程模块threading,我们可以定义一个函数接收两个参数,一个与客户端的连接句柄,一个是客户端地址,函数内部执行与客户端的具体交互;外部使用socket正常逻辑,执行到accept时开启一个包含上述函数的线程,就是这么简单

服务器端:
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
26
27
import threading
import socket

# 实现与客户端的具体交互
def interactives(conn, addr):
print(addr, '成功连接服务器-----')
while 1:
try:
ret = conn.recv(1024)
back_ret = ret + ' Go Home'.encode('utf8')
conn.send(back_ret)
except Exception:
break
print(addr, '断开连接服务器-----')
conn.close()

ip_port = ('10.10.10.103', 9999)
server = socket.socket()
server.bind(ip_port)
server.listen(3)
while 1:
conn, addr = server.accept()
# 实例化线程
t = threading.Thread(target=interactives, args=(conn, addr))
# 开始线程
t.start()
server.close()
客户端:
1
2
3
4
5
6
7
8
9
10
import socket
ip_port = ('10.10.10.103', 9999)
client = socket.socket()
client.connect(ip_port)
while 1:
name = input('输入姓名:').encode('utf8')
client.send(name)
ret = client.recv(1024).decode('utf8')
print(ret)
client.close()