Skip to content

Commit 4f28082

Browse files
Your NameYour Name
authored andcommitted
[threading] use threading to communicate with client
1 parent a1fab4c commit 4f28082

1 file changed

Lines changed: 39 additions & 10 deletions

File tree

core_python/ch16_network_programming.py

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,59 @@
11
#!/usr/bin/env python
22
import socket as skt
33
from time import ctime
4+
import threading
45

56
BUFFER_SIZE = 1024
67

8+
class MyThread(threading.Thread):
9+
""" tcp server threading main loop that communicate with client
10+
tcp_client_socket: the socket that return from accept method
11+
cli_addr: the address that return from accept method, a tuple
12+
"""
13+
def __init__(self, tcp_client_socket, cli_addr):
14+
super(MyThread, self).__init__()
15+
self.tcp_client_socket = tcp_client_socket
16+
self.cli_addr = cli_addr
17+
self.loop = False
18+
def run(self):
19+
self.loop = True
20+
while self.loop:
21+
data = self.tcp_client_socket.recv(BUFFER_SIZE)
22+
if not data:
23+
break
24+
self.tcp_client_socket.send('(%s) %s' % (ctime(), data))
25+
26+
def quit(self):
27+
self.loop = False
28+
729
def run_tcp_server(host='', port=21567):
830
server_addr = (host, port)
931
tcp_server_socket = skt.socket(skt.AF_INET, skt.SOCK_STREAM)
1032
tcp_server_socket.bind(server_addr)
1133
tcp_server_socket.listen(5)
34+
client_skt_addr_dict = {}
35+
print 'waiting for connection...'
1236

1337
try:
1438
while True:
15-
print 'waiting for connetion...'
1639
tcp_client_socket, cli_addr = tcp_server_socket.accept()
17-
print '...conneted from:', cli_addr
40+
t = MyThread(tcp_client_socket, cli_addr)
41+
client_skt_addr_dict[(tcp_client_socket, cli_addr)] = t
42+
t.start()
43+
print '=' * 20
44+
for d in client_skt_addr_dict:
45+
print client_skt_addr_dict[d]
1846

19-
while True:
20-
data = tcp_client_socket.recv(BUFFER_SIZE)
21-
if not data:
22-
break
23-
tcp_client_socket.send('(%s) %s' % (ctime(), data))
2447
except (KeyboardInterrupt, EOFError), err:
25-
print 'got error', err
48+
print 'got error,cnt=', err, threading.active_count()
49+
for d in client_skt_addr_dict:
50+
t = client_skt_addr_dict[d]
51+
print 'cnt=', threading.active_count()
52+
t.quit()
53+
2654
tcp_client_socket.close()
2755
tcp_server_socket.close()
56+
print client_skt_addr_dict, threading.active_count()
2857

2958
def run_tcp_client(host='localhost', port=21567):
3059
tcp_client_socket = skt.socket(skt.AF_INET, skt.SOCK_STREAM)
@@ -75,7 +104,7 @@ def run_udp_client(host='localhost', port=21567):
75104
udp_client_socket.close()
76105

77106
if __name__ == '__main__':
78-
#run_tcp_server()
107+
run_tcp_server()
79108
#run_tcp_client(host='10.241.53.79') # server ip
80-
run_udp_server()
109+
#run_udp_server()
81110
#run_udp_client(host='10.241.53.79') # server ip

0 commit comments

Comments
 (0)