Either Java or Python You are to create a direct messenger program. In particula
ID: 3754577 • Letter: E
Question
Either Java or Python
You are to create a direct messenger program. In particular, the program will perform as follows:
It must behave as either a client or a server, depending on the command line arguments supplied when started.
Specifically, the -l option will direct the program to listen for connections, thereby acting as a server. If the -l option is not present on the command line, your program will connect to a server, thereby acting as a client.
The port number must also be supplied as a command line argument.
Although your messenger may be hard-coded to connect only to localhost when acting as a client, you may include a server address on the command line as well, thereby permitting your messenger to connect between hosts.
The -l option, if used, should be placed immediately after the name of the program and before the port number and server address arguments.
Once the client and server messengers are connected, either end can send text messages to the other end.
Messages must be provided to the program using standard input.
Immediately after receiving a message, the program must output the message to standard output.
The program is terminated by first shutting down sending, then closing the socket. Once one end shuts down, the other side will receive a zero-length message, informing it of the shut down. The other side must then shut down immediately.
Usage
Usage as a server:Python:
Java:
Usage as a client:Python:
Java:
Explanation / Answer
import sys
import socket
args = sys.argv
print(args)
server=False
client=False
#Command Line arguments checking
if(len(args)==3):
if(args[1]=="-l"):
try:
portAddress = int(args[2])
server=True
except ValueError:
print("Port Number Should contain only numbers,1-65535")
else:
try:
portAddress = int(args[1])
try:
socket.inet_aton(args[2])
client=True
except socket.error:
print("Server address is invalid.")
except ValueError:
print("Port Number Should contain only numbers,1-65535")
else:
print("invalid number of arguments")
#end of command line argument checking
if(client==True):
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
hostAddress = args[2]
portAddress = int(args[1])
soc.connect((hostAddress, portAddress))
while True:
try:
print('Waiting For Message.......')
receivedMsg = soc.recv(1024)
print("Server: ",receivedMsg.decode("ascii"))
sendMsg = input("YOU: ")
soc.send(sendMsg.encode("ascii"))
except Exception:
print("Error Occured.Exiting........")
break
soc.close()
if(server==True):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#socket creation
hostAddress = ''
portAddress = int(args[2])
print('Socket created')
try:
server.bind((hostAddress,portAddress))
print("Binding Completed........")
except Exception as error:
print('Unable to Bind,')
print(error)
sys.exit(0)
server.listen()
print('Waiting for client Connections')
clientConn, clientAddr = server.accept()
print('Client Connected',clientAddr[0],':',clientAddr[1])
while True:
try:
sendMsg = input("YOU: ")
clientConn.send(sendMsg.encode('ascii'))
print("Waiting for Msg.......")
receivedMsg = clientConn.recv(1024)
print("Client:",receivedMsg.decode("ascii"))
except Exception:
print("Error Occured..Exiting........")
break
clientConn.close()
server.close()
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.