基于 TCP 的 Python socket 编程流程:
图中绿框部分在实际开发中可以用子线程或子进程进程处理。
Server端示例代码:
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
import socket
import threading
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 8000))
server.listen()
def handle(sck):
while True:
rcv_bytes = sck.recv(1024)
rcv_data = rcv_bytes.decode("utf8")
print("server got:", rcv_data)
if rcv_data == "quit":
sck.close()
return
resp_data = f"You said: {rcv_data}. Tell me 'quit' to quit if you want to finish ".encode("utf8")
sck.send(resp_data)
if __name__ == '__main__':
while True:
print("server is accepting")
sck, addr = server.accept()
handle_th = threading.Thread(target=handle, args=(sck,))
handle_th.start()
client端示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
import socket
# AF_INET 指 IPv4,SOCK_STREAM 指 TCP 协议
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接指定IP和端口号
client.connect(("127.0.0.1", 8000))
if __name__ == '__main__':
while True:
input_data = input("input something:")
client.send(input_data.encode("utf8"))
rcv_bytes = client.recv(1024)
print(rcv_bytes.decode("utf8"))