In: Computer Science
Write a Python Client/Server Socket Program that will allow you to send text messages between the server and client, terminating when the exit is typed on the client. Build the program on your 2-VM’s and get it working. Cut and paste your code below along with screen shots of your program working.
So, what is a server? Well, a server is a software that waits for client requests and serves or processes them accordingly.
On the other hand, a client is requester of this service. A client program request for some resources to the server and server responds to that request.
Socket is the endpoint of a bidirectional communications channel between server and client. Sockets may communicate within a process, between processes on the same machine, or between processes on different machines. For any communication with a remote program, we have to connect through a socket port.
The main objective of this socket programming tutorial is to get introduce you how socket server and client communicate with each other. You will also learn how to write python socket server program.
Python Socket Example
We have said earlier that a socket client requests for some resources to the socket server and the server responds to that request.
So we will design both server and client model so that each can communicate with them. The steps can be considered like this.
Python Socket Server
We will save python socket server program as
socket_server.py
. To use python socket connection, we
need to import socket module.
Then, sequentially we need to perform some task to establish connection between server and client.
We can obtain host address by using
socket.gethostname()
function. It is recommended to
user port address above 1024 because port number lesser than 1024
are reserved for standard internet protocol
import socket
def server_program():
# get the hostname
host = socket.gethostname()
port = 5000 # initiate port no above 1024
server_socket = socket.socket() # get instance
# look closely. The bind() function takes tuple as argument
server_socket.bind((host, port)) # bind host address and port together
# configure how many client the server can listen simultaneously
server_socket.listen(2)
conn, address = server_socket.accept() # accept new connection
print("Connection from: " + str(address))
while True:
# receive data stream. it won't accept data packet greater than 1024 bytes
data = conn.recv(1024).decode()
if not data:
# if data is not received break
break
print("from connected user: " + str(data))
data = input(' -> ')
conn.send(data.encode()) # send data to the client
conn.close() # close the connection
if __name__ == '__main__':
server_program()
So our python socket server is running on port 5000 and it will wait for client request. If you want server to not quit when client connection is closed, just remove the if condition and break statement. Python while loop is used to run the server program indefinitely and keep waiting for client request.
Python Socket Client
We will save python socket client program as
socket_client.py
. This program is similar to the
server program, except binding.
The main difference between server and client program is, in server program, it needs to bind host address and port address together.
See the below python socket client example code, the comment will help you to understand the code.
import socket
def client_program():
host = socket.gethostname() # as both code is running on same pc
port = 5000 # socket server port number
client_socket = socket.socket() # instantiate
client_socket.connect((host, port)) # connect to the server
message = input(" -> ") # take input
while message.lower().strip() != 'bye':
client_socket.send(message.encode()) # send message
data = client_socket.recv(1024).decode() # receive response
print('Received from server: ' + data) # show in terminal
message = input(" -> ") # again take input
client_socket.close() # close the connection
if __name__ == '__main__':
client_program()
Python Socket Programming Output
To see the output, first run the socket server program. Then run the socket client program. After that, write something from client program. Then again write reply from server program. At last, write bye from client program to terminate both program. Below short video will show how it worked on my test run of socket server and client example programs
pankaj$ python3.6 socket_server.py
Connection from: ('127.0.0.1', 57822)
from connected user: Hi
-> Hello
from connected user: How are you?
-> Good
from connected user: Awesome!
-> Ok then, bye!
pankaj$
pankaj$ python3.6 socket_client.py -> Hi Received from
server: Hello -> How are you? Received from server: Good ->
Awesome! Received from server: Ok then, bye! -> Bye
pankaj$