Hi i develop chat gui with socket. I want to send text and photo message. Photo messages came to server but server don't send to clients. i wrote for send photo code inside '''. When I write server.py this code gui be very very slowly and dont send text messages and only one send photo to server.
Server codes
from socket import *
from threading import *
clients=[]
names =[]
def clientThread(client):
initname = client.recv(1024).decode('utf-8')
bayrak = True
while True:
try:
if bayrak:
names.append(initname)
print(initname, 'connect')
bayrak = False
''' if client.recv(1024).decode('utf8') == "came to photo":
filepath = client.recv(1024).decode('utf-8')
filepath = filepath.split("/")[-1]
file = open(filepath, "wb")
image_chunk = client.recv(1024)
while image_chunk:
file.write(image_chunk)
image_chunk = client.recv(1024)
file.close() '''
message = client.recv(1024).decode('utf-8')
for c in clients:
if c != client:
index = clients.index(client)
name = names[index]
c.send((name + ':' + message).encode('utf-8'))
except:
index = clients.index(client)
clients.remove(client)
name = names[index]
names.remove(name)
print(name + 'out')
break
server = socket(AF_INET, SOCK_STREAM)
ip= 'localhost'
port = 8081
server.bind((ip,port))
server.listen()
print('Server is listening')
while True:
client, address = server.accept()
clients.append(client)
print('Connect', address[0]+ ':' + str(address[1]))
thread = Thread(target=clientThread, args=(client,))
thread.start()
Client Codes
client = socket(AF_INET, SOCK_STREAM)
ip= 'localhost'
port = 8081
client.connect((ip, port))
pencere = Tk()
pencere.title('Chat')
messages =Text(pencere, width=50)
messages.grid(row=0, column=0, padx=10, pady=10)
yourMessage = Entry(pencere, width=50)
yourMessage.insert(0, 'Name')
yourMessage.grid(row=1,column=0,padx=10,pady=10)
yourMessage.focus()
yourMessage.select_range(0, END)
def sendMessage():
clientMessage = yourMessage.get()
messages.insert(END, '\n'+ 'You: ' + clientMessage)
client.send(clientMessage.encode('utf-8'))
yourMessage.delete(0, END)
def openFile():
client.send("came to photo".encode("utf-8"))
filepath = fd.askopenfilename()
client.send(filepath.encode("utf-8"))
file = open(filepath,"rb")
data = file.read(1024)
while data:
client.send(data)
data = file.read(1024)
file.close()
bmessageGonder = Button(pencere, text= 'Send',command=sendMessage)
bmessageGonder.grid(row=2,column=0,padx=5,pady=5)
dosyaSec = Button(pencere, text = 'Select Photo', command=openFile)
dosyaSec.grid(row=3,column=0,padx=5,pady=5)
def recvMessage():
while True:
serverMessage = client.recv(1024).decode('utf-8')
messages.insert(END, '\n' + serverMessage)
recvThread = Thread(target=recvMessage)
recvThread.daemon= True
recvThread.start()
pencere.mainloop()