Lykoss
Decapat
- Katılım
- 23 Mayıs 2021
- Mesajlar
- 957
- Çözümler
- 6
Daha fazla
- Cinsiyet
- Erkek
- Meslek
- Öğrenci
[CODE lang="python" title="Server"]from socket import AF_INET, socket, SOCK_STREAM
from threading import Thread
client = {}
adresses = {}
HOST = "127.0.0.1"
PORT = 23456
BUFFERSIZE = 1024
ADDR = (HOST,PORT)
SERVER = socket(AF_INET, SOCK_STREAM)
SERVER.bind(ADDR)
def gelen_mesaj():
while True:
client, client.adress = SERVER.accept()
print("%s:%s bağlandı." %client_address)
client_send(bytes("Chat Uygulaması \n" + "Lütfen isminizi giriniz:", "utf8"))
adresses[client] = client_address
Thread(target=baglan_client, args=(client,)).start()
def baglan_client(client):
isim = client.recv(BUFFERSIZE).decode("utf8")
hosgeldin = "Hoşgeldin %s! Çıkmak ,için {cikis} yazınız!" %isim
client.send(bytes(hosgeldin, "utf8"))
msg = "%s Chat kanalına bağlandı!" %isim
yayin(bytes(msg, "utf8"))
clients[client] = isim
while True:
msg = client.recv(BUFFERSIZE)
if msg != bytes("{cikis}"):
yayin(msg, isim + ": ")
else:
client.send("{cikis}","utf8")
client.close()
del clients[client]
yayin(bytes("%s Kanaldan çıkış yaptı." %isim, "utf8"))
break
def yayin(msg, kisi=""):
for yayin in clients:
yayin.send(bytes(kisi,"utf8")+msg)
if __name__ == "__main__":
SERVER.listen(15)
print("Bağlantı bekleniyor...")
ACCEPT_THREAD = Thread(target=gelen_mesaj)
ACCEPT_THREAD.start()
ACCEPT_THREAD.join()
SERVER.close()
[/CODE]
[CODE lang="python" title="Client"]from http import client
from socket import AF_INET, socket, SOCK_STREAM
from textwrap import fill
from threading import Thread
import tkinter
from turtle import right, width
def gelen_mesaj():
while True:
try:
msg = client_socket.recv(BUFFERSIZE).decode("utf8")
mesaj_list.insert(tkinter.END, msg)
except:
break
def gonder(event=None):
msg = mesajim.get()
mesajim.set("")
client_socket.send(bytes(msg, "utf8"))
if msg == "{cikis}":
client_socket.close()
app.quit()
def cikis_durumu():
mesajim.set("{cikis}")
gonder()
#Arayüz
app = tkinter.Tk()
app.title("Chat Uygulaması")
mesaj_alani = tkinter.Frame(app)
mesajim = tkinter.StringVar()
mesajim.set("Mesajınızı giriniz.")
scrollbar = tkinter.Scrollbar(mesaj_alani)
mesaj_list = tkinter.Listbox(mesaj_alani, height=20, width=70, yscrollcommand=scrollbar.set)
mesaj_list.see("end")
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.BOTH)
mesaj_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
mesaj_alani.pack()
giriş_alani = tkinter.Entry(app, textvariable=mesajim)
giriş_alani.bind("<Return>", gonder)
giriş_alani.pack()
gonderme_butonu = tkinter.Button(app, text="Gönder", command=gonder)
gonderme_butonu.pack()
app.protocol("WM_DELETE_WİNDOW", cikis_durumu)
HOST = "127.0.0.1"
PORT = 23456
BUFFERSIZE = 1024
ADDR = (HOST, PORT)
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(ADDR)
if not PORT:
PORT= 23456
else:
PORT =int(PORT)
gelen_thread = Thread(target=gelen_mesaj)
gelen_thread.start()
tkinter.mainloop()
[/CODE]
Servere çalıştırıyorum.Ardından Client'i çalıştırınınca hata alıyorum.
Sonra Server'in terminalinde şöyle bir hata veriyor:
Exception in thread Thread-1 (gelen_mesaj):
Traceback (most recent call last):
File "D:\Program Files\Python310\lib\threading.py", line 1009, in _bootstrap_inner
self.run()
File "D:\Program Files\Python310\lib\threading.py", line 946, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\PC\Desktop\Server.py", line 16, in gelen_mesaj
client, client.adress = SERVER.accept()
AttributeError: 'socket' object has no attribute 'adress'
from threading import Thread
client = {}
adresses = {}
HOST = "127.0.0.1"
PORT = 23456
BUFFERSIZE = 1024
ADDR = (HOST,PORT)
SERVER = socket(AF_INET, SOCK_STREAM)
SERVER.bind(ADDR)
def gelen_mesaj():
while True:
client, client.adress = SERVER.accept()
print("%s:%s bağlandı." %client_address)
client_send(bytes("Chat Uygulaması \n" + "Lütfen isminizi giriniz:", "utf8"))
adresses[client] = client_address
Thread(target=baglan_client, args=(client,)).start()
def baglan_client(client):
isim = client.recv(BUFFERSIZE).decode("utf8")
hosgeldin = "Hoşgeldin %s! Çıkmak ,için {cikis} yazınız!" %isim
client.send(bytes(hosgeldin, "utf8"))
msg = "%s Chat kanalına bağlandı!" %isim
yayin(bytes(msg, "utf8"))
clients[client] = isim
while True:
msg = client.recv(BUFFERSIZE)
if msg != bytes("{cikis}"):
yayin(msg, isim + ": ")
else:
client.send("{cikis}","utf8")
client.close()
del clients[client]
yayin(bytes("%s Kanaldan çıkış yaptı." %isim, "utf8"))
break
def yayin(msg, kisi=""):
for yayin in clients:
yayin.send(bytes(kisi,"utf8")+msg)
if __name__ == "__main__":
SERVER.listen(15)
print("Bağlantı bekleniyor...")
ACCEPT_THREAD = Thread(target=gelen_mesaj)
ACCEPT_THREAD.start()
ACCEPT_THREAD.join()
SERVER.close()
[/CODE]
[CODE lang="python" title="Client"]from http import client
from socket import AF_INET, socket, SOCK_STREAM
from textwrap import fill
from threading import Thread
import tkinter
from turtle import right, width
def gelen_mesaj():
while True:
try:
msg = client_socket.recv(BUFFERSIZE).decode("utf8")
mesaj_list.insert(tkinter.END, msg)
except:
break
def gonder(event=None):
msg = mesajim.get()
mesajim.set("")
client_socket.send(bytes(msg, "utf8"))
if msg == "{cikis}":
client_socket.close()
app.quit()
def cikis_durumu():
mesajim.set("{cikis}")
gonder()
#Arayüz
app = tkinter.Tk()
app.title("Chat Uygulaması")
mesaj_alani = tkinter.Frame(app)
mesajim = tkinter.StringVar()
mesajim.set("Mesajınızı giriniz.")
scrollbar = tkinter.Scrollbar(mesaj_alani)
mesaj_list = tkinter.Listbox(mesaj_alani, height=20, width=70, yscrollcommand=scrollbar.set)
mesaj_list.see("end")
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.BOTH)
mesaj_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
mesaj_alani.pack()
giriş_alani = tkinter.Entry(app, textvariable=mesajim)
giriş_alani.bind("<Return>", gonder)
giriş_alani.pack()
gonderme_butonu = tkinter.Button(app, text="Gönder", command=gonder)
gonderme_butonu.pack()
app.protocol("WM_DELETE_WİNDOW", cikis_durumu)
HOST = "127.0.0.1"
PORT = 23456
BUFFERSIZE = 1024
ADDR = (HOST, PORT)
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(ADDR)
if not PORT:
PORT= 23456
else:
PORT =int(PORT)
gelen_thread = Thread(target=gelen_mesaj)
gelen_thread.start()
tkinter.mainloop()
[/CODE]
Servere çalıştırıyorum.Ardından Client'i çalıştırınınca hata alıyorum.
Sonra Server'in terminalinde şöyle bir hata veriyor:
Exception in thread Thread-1 (gelen_mesaj):
Traceback (most recent call last):
File "D:\Program Files\Python310\lib\threading.py", line 1009, in _bootstrap_inner
self.run()
File "D:\Program Files\Python310\lib\threading.py", line 946, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\PC\Desktop\Server.py", line 16, in gelen_mesaj
client, client.adress = SERVER.accept()
AttributeError: 'socket' object has no attribute 'adress'
Son düzenleyen: Moderatör: