python多线程实现tcp socket
服务器代码
复制代码
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49#!/usr/bin/env python3 # coding=utf-8 from socket import * from threading import Thread class TcpServer(object): """Tcp服务器""" def __init__(self, Port): """初始化对象""" self.code_mode = "utf-8" #收发数据编码/解码格式 self.server_socket = socket(AF_INET, SOCK_STREAM) #创建socket self.server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) #设置端口复用 self.server_socket.bind(("", Port)) #绑定IP和Port self.server_socket.listen(100) #设置为被动socket print("Listen...") def run(self): """运行""" while True: client_socket, client_addr = self.server_socket.accept() #等待客户端连接 print("{} online".format(client_addr)) tr = Thread(target=self.recv_data, args=(client_socket, client_addr)) #创建线程为客户端服务 tr.start() #开启线程 self.server_socket.close() def recv_data(self, client_socket, client_addr): """收发数据""" while True: data = client_socket.recv(1024).decode(self.code_mode) if data: print("{}:{}".format(client_addr, data)) client_socket.send(data.encode(self.code_mode)) else: #客户端断开连接 print("{} offline".format(client_addr)) break client_socket.close() def main(): print("33c", end="") #清屏 port = int(input("请输入要绑定的Port:")) my_server = TcpServer(port) my_server.run() if __name__ == "__main__": main()
客户端代码
复制代码
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51#!/usr/bin/env python3 # coding=utf-8 from socket import * from threading import Thread class TcpClient(object): """Tcp客户端""" def __init__(self, IP="127.0.0.1", Port=8888): """初始化对象""" self.code_mode = "utf-8" #收发数据编码/解码格式 self.IP = IP self.Port = Port self.my_socket = socket(AF_INET, SOCK_STREAM) #创建socket def run(self): """启动""" self.my_socket.connect((self.IP, self.Port)) #连接服务器 tr = Thread(target=self.recv_data) #创建线程收数据 ts = Thread(target=self.send_data) #创建线程发数据 tr.start() #开启线程 ts.start() def recv_data(self): """收数据""" while True: data = self.my_socket.recv(1024).decode(self.code_mode) if data: print("r>>{}n<<".format(data), end="") else: break self.my_socket.close() def send_data(self): """发数据""" while True: data = input("<<") self.my_socket.send(data.encode(self.code_mode)) def main(): print("33c", end="") #清屏 ip = input("请输入服务器IP:") port = int(input("请输入服务器Port:")) my_socket = TcpClient(ip, port) my_socket.run() if __name__ == "__main__": main()
最后
以上就是犹豫星月最近收集整理的关于Python网络编程之多线程并发tcp/socket服务器的全部内容,更多相关Python网络编程之多线程并发tcp/socket服务器内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复