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())