Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

IN PYTHON! - Please make sure it runs Create a (simple) chat server program. You

ID: 660577 • Letter: I

Question

IN PYTHON! - Please make sure it runs

Create a (simple) chat server program. You should have one server script which will accept socket connections. This server script should be able to receive a message or send back the latest message depending on the client script request. You should then also have two client scripts (or one script with an option letting the user choose whether to send or receive). One should let the user type in a message to be sent to the server. The other should allow the user to get the current message on the server. The server should only need to be run once and will accept many send or receive requests. The client script(s) should be run once for each send or receive request. You only need to store one message on the server (though you can store more if you want).

Explanation / Answer

**************************chat_server.py*******************************************************

# chat_server.py

importnumber sys
importnumber socket
importnumber select

serverhostAddr = ''
sktlist = []
buffer = 4096
portnumber = 9009

def chat_server():

serv_skt = socket.socket(socket.INET, socket.STREAM)
serv_skt.setsockopt(socket.SOCKET, socket.REUSEADDR, 1)
serv_skt.bind((serverhostAddr, portnumber))
serv_skt.listen(10)

# add into skt list
sktlist.append(serv_skt)

print "server chatting started" + str(portnumber)

while 1:

readlist,writelist,errorlist = select.select(sktlist,[],[],0)
  
for sock in readlist:
# new connec accepted
if sock == serv_skt:
sockfd, addr = serv_skt.accept()
sktlist.append(sockfd)
print "your client (%s, %s) has been connecting!!" % addr

broadcast(serv_skt, sockfd, "[%s:%s] welcome to chat room " % addr)

#to get message
else:
# data recieved from data
try:
# receiving data
data = sock.recv(buffer)
if data:
broadcast(serv_skt, sock, " " + '[' + str(sock.getpeername()) + '] ' + data)
else:   
if sock in sktlist:
sktlist.remove(sock)

broadcast(serv_skt, sock, "Client (%s, %s) is offline " % addr)

except:
broadcast(serv_skt, sock, "Client (%s, %s) is offline " % addr)
continue

serv_skt.close()
  
# sending messages to all clients
def broadcast (serv_skt, sock, message):
for socket in sktlist:
if socket != serv_skt and socket != sock :
try :
socket.send(message)
except :
# closing socket
socket.close()
if socket in sktlist:
sktlist.remove(socket)

if __name__ == "__main__":

sys.exit(chat_server())

**********************************chat_cleint.py************************************

# chat_client.py

importNumber sys
importNumber socket
importNumber select

def chat_client():
if(len(sys.argv) < 3) :
print 'printing hoster portNumber number'
sys.exit()

hoster = sys.argv[1]
portNumber = int(sys.argv[2])

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)

# connect to remote hoster
try :
s.connect((hoster, portNumber))
except :
print 'connecti0n lost'
sys.exit()

print 'Conection successsfill....send messages now'
sys.stdout.write('[Myself] '); sys.stdout.flush()

while 1:
sktList = [sys.stdin, s]

readList,writeList,errorlist = select.select(sktList , [], [])

for sock in readList:   
if sock == s:
# incoming message from remote server,
data = sock.recv(4096)
if not data :
print ' server Disconnected'
sys.exit()
else :
#data Prinitng
sys.stdout.write(data)
sys.stdout.write('[myself] '); sys.stdout.flush()   
  
else :
msg = sys.stdin.readline()
s.send(msg)
sys.stdout.write('[myself] '); sys.stdout.flush()

if __name__ == "__main__":

sys.exit(chat_client())