Question: May you help , users can not communicate with each ohter, may you also improve my code? server: import socket import threading import os #
May you help users can not communicate with each ohter, may you also improve my code?
server:
import socket import threading import os # Folder for shared files sharedfolder osenviron.getSERVERSHAREDFILES", "SharedFiles" # Global variables for clients and usernames clients usernames def handleclientconn addr: printfNew connection from addr username conn.recvdecode if username: usernamesconn username broadcastfusername has joined", conn clientsconn addr try: while True: message conn.recvdecode if message: if message.startswithexit: disconnectclientconn break elif message.startswithbroadcast: broadcastfusername: message: conn elif message.startswithunicast: targetuser, msg message.split: sendtousertargetuser, fusername: msg elif message.startswithfiles: listfilesconn elif message.startswithdownload: filename message.split sendfileconn filename else: conn.sendInvalid command.".encode except Exception as e: printfError with username: e finally: disconnectclientconn def broadcastmessage senderconnNone: for conn in clients.keys: if conn senderconn: conn.sendmessageencode def sendtousertargetuser, message: for conn, user in usernames.items: if user targetuser: conn.sendmessageencode break def listfilesconn: try: files oslistdirsharedfolder conn.sendfFiles in sharedfolder: joinfilesencode except Exception as e: conn.sendfError accessing files: eencode def sendfileconn filename: filepath ospath.joinsharedfolder, filename try: with openfilepathrb as f: conn.sendfSTART ospath.getsizefilepathencode while data : fread: conn.senddata conn.sendENDencode except FileNotFoundError: conn.sendFile not found.".encode def disconnectclientconn: username usernames.getconn "Unknown" broadcastfusername has left", conn conn.close del clientsconn del usernamesconn def main: serversocket socket.socketsocketAFINET, socket.SOCKSTREAM host 'localhost' port serversocket.bindhost port serversocket.listen printfServer listening on host:port while True: conn, addr serversocket.accept threading.Threadtargethandleclient, argsconn addrstart if namemain: main
client.py:
import socket
import threading
import os
import sys
def receivemessagesconn:
while True:
try:
message conn.recvdecode
if message: printmessage
else:
printDisconnected from server."
conn.close
break
except Exception as e: printfError: e
break
def mainusername hostname, port:
conn socket.socketsocketAFINET, socket.SOCKSTREAM
try:
conn.connecthostname port
conn.sendusernameencode
printconnrecvdecode
except Exception as e:
printfCould not connect: e
return
threading.Threadtargetreceivemessages, argsconnstart
while True: command inputfusername
if command exit: conn.sendexitencode
break elif command.startswithbroadcast: conn.sendfbroadcast commandencode elif command.startswithunicast: conn.sendcommandencode elif command files: conn.sendfilesencode elif command.startswithdownload: conn.sendcommandencode else: printInvalid command." conn.close if namemain: if lensysargv: printUsage: python client.py usernamehostnameport else: mainsysargv sysargv intsysargv
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
