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 ?
 
Server iç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
 

Geri
Yukarı