In this project we’re going to write a server that uses select() to handle multiple simultaneous connections.
The client is already provided. You fill in the server.
Grab this ZIP file15 with all the input files.
The select_client.py file is already complete.
You have to fill in the select_server.py file to get it going.
Your server should do the following:
When a client connects, the server prints out the client connection info in this form (it’s the client IP and port number in front):
('127.0.0.1', 61457): connectedWhen a client disconnects, the server prints out the late client’s connection info in this form:
('127.0.0.1', 61457): disconnectedHint: You can use the .getpeername() method on a socket to get the address of the remote side even after it has disconnected. It’ll come back as a tuple containing ("host", port), just like what you pass to connect().
When a client sends data, the server should print out the length of the data as well as the raw bytestring object received:
('127.0.0.1', 61457) 22 bytes: b'test1: xajrxttphhlwmjf'Running the server:
python select_server.py 3490Running the clients:
python select_client.py alice localhost 3490
python select_client.py bob localhost 3490
python select_client.py chris localhost 3490The first argument to the client can be any string–the server prints it out with the data to help you identify which client it came from.
Example output:
waiting for connections
('127.0.0.1', 61457): connected
('127.0.0.1', 61457) 22 bytes: b'test1: xajrxttphhlwmjf'
('127.0.0.1', 61457) 22 bytes: b'test1: geqtgopbayogenz'
('127.0.0.1', 61457) 23 bytes: b'test1: jquijcatyhvfpydn'
('127.0.0.1', 61457) 23 bytes: b'test1: qbavdzfihualuxzu'
('127.0.0.1', 61457) 24 bytes: b'test1: dyqmzawthxjpkgpcg'
('127.0.0.1', 61457) 23 bytes: b'test1: mhxebjpmsmjsycmj'
('127.0.0.1', 61458): connected
('127.0.0.1', 61458) 23 bytes: b'test2: bejnrwxftgzcgdyg'
('127.0.0.1', 61457) 24 bytes: b'test1: ptcavvhroihmgdfyw'
('127.0.0.1', 61458) 24 bytes: b'test2: qrumcrmqxauwtcuaj'
('127.0.0.1', 61457) 26 bytes: b'test1: tzoitpusjaxljkfxfvw'
('127.0.0.1', 61457) 17 bytes: b'test1: mtcwokwquc'
('127.0.0.1', 61458) 18 bytes: b'test2: whvqnzgtaem'
('127.0.0.1', 61457): disconnected
('127.0.0.1', 61458) 21 bytes: b'test2: raqlvexhimxfgl'
('127.0.0.1', 61458): disconnected