Socket programlama hata veriyor

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'
 
Son düzenleyen: Moderatör:
Server İçin:
Python:
from socket import *
from threading import *

clients = []
names = []

def clientThread(client):
    bayrak = True
    while True:
        try:
            message = client.recv(1024).decode('utf8')
            if bayrak:
                names.append(message)
                print(message,"bağlandı")
                bayrak = False
            for c in clients:
                if c != client:
                    index = clients.index(client)
                    name = names[index]
                    c.send((name + ":" + message).encode('utf8'))
        except:
            index = clients.index(client)
            clients.remove(client)
            name = names[index]
            names.remove(name)
            print(name + ' Ayrıldı')
            break

server = socket(AF_INET,SOCK_STREAM)

ip = '127.0.0.1'
port = 55555
server.bind((ip,port))
server.listen()
print("Server Dinlemede...")

while True:
    client, address = server.accept()
    clients.append(client)
    print("Bağlantı Yapıldı...",address[0] + ":" + str(address[1]))
    thread = Thread(target=clientThread,args=(client,))
    thread.start()

Dener misiniz? veya Kendi yazdığınız kod ile karşılaştırır mısınız ?
 

Client bağlanıyor ama yazılan mesajlar gözükmüyor. Hocam yeni fark ettim sadece kendi yazdığımız mesajlar gözükmüyor. Karşıya gidiyor
 
Client bağlanıyor ama yazılan mesajlar gözükmüyor.

Attığım server kodunda ki port ile cliette kullandığınız portu aynı yapar mısınız?
Arayüz kütüphanesi kullanın?

YouTube'dan Python chat uygulaması yazarsanız nerede ne hata yapmışım görebilirsiniz. (Türkçe video mevcut)
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…