-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathclient.py
54 lines (43 loc) · 1.43 KB
/
client.py
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
52
53
54
import select
import socket
import sys
class Client():
def __init__(self):
self._socket = None
self._working = True
def start(self, server_port, server_ip):
print('Hello friend')
dest = (server_ip, server_port)
try:
self._socket = socket.create_connection(dest)
except ConnectionRefusedError as err:
print('Connection refused')
sys.exit(1)
self._handle_messages()
def _handle_messages(self):
input_list = [sys.stdin, self._socket]
self._prompt()
while self._working:
ready_to_read, _, _ = select.select(input_list, [], [])
self._handle_input_channel(ready_to_read)
def _handle_input_channel(self, ready_to_read):
for input_channel in ready_to_read:
if input_channel is self._socket:
self._receive_data_from_server()
else:
self._send_message_to_server()
def _receive_data_from_server(self):
data = self._socket.recv(4096)
if not data:
print('\nDisconnected from chat server')
sys.exit(0)
else:
print(data.decode('utf-8'))
self._prompt()
def _send_message_to_server(self):
msg = '[*] %s' % input()
self._socket.send(msg.encode('utf-8'))
self._prompt()
def _prompt(self):
print('[Me] ', end='')
sys.stdout.flush()