Python server client iletişimi

bu hata-----------------

#!/usr/bin/env python3
"""Script for Tkinter GUI chat client."""
from socket import AF_INET, socket, SOCK_STREAM
from threading import Thread
import tkinter


def receive():
    """Handles receiving of messages."""
    while True:
        try:
            msg = client_socket.recv(BUFSIZ).decode("utf8")
            msg_list.insert(tkinter.END, msg)
        except OSError:  # Possibly client has left the chat.
            break


def send(event=None):  # event is passed by binders.
    """Handles sending of messages."""
    msg = my_msg.get()
    my_msg.set("")  # Clears input field.
    client_socket.send(bytes(msg, "utf8"))
    if msg == "{quit}":
        client_socket.close()
        top.quit()


def on_closing(event=None):
    """This function is to be called when the window is closed."""
    my_msg.set("{quit}")
    send()

top = tkinter.Tk()
top.title("Chatter")

messages_frame = tkinter.Frame(top)
my_msg = tkinter.StringVar()  # For the messages to be sent.
my_msg.set("Type your messages here.")
scrollbar = tkinter.Scrollbar(messages_frame)  # To navigate through past messages.
# Following will contain the messages.
msg_list = tkinter.Listbox(messages_frame, height=15, width=50, yscrollcommand=scrollbar.set)
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
msg_list.pack()
messages_frame.pack()

entry_field = tkinter.Entry(top, textvariable=my_msg)
entry_field.bind("<Return>", send)
entry_field.pack()
send_button = tkinter.Button(top, text="Send", command=send)
send_button.pack()

top.protocol("WM_DELETE_WINDOW", on_closing)

#----Now comes the sockets part----
HOST = input('Enter host: ')
PORT = input('Enter port: ')
if not PORT:
    PORT = 33000
else:
    PORT = int(PORT)

BUFSIZ = 1024
ADDR = (HOST, PORT)

client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(ADDR)

receive_thread = Thread(target=receive)
receive_thread.start()
tkinter.mainloop()  # Starts GUI execution.

buda client-----------------

@dildeolupbiten sizce nerede yanlış yaptık

yaptık ama host=localhost bunu nasıl ikimizinde kullanabileceği hale getiririz

Bende çalıştı. Muhtemelen girdiğiniz PORT numarası farklı.

evet ama farklı pclerde olmuyor

Aynı ağda mısınız? Yoksa farklı ağlarda mı?

Eğer aynı ağdaysanız, server’ın yerel ip adresini yazmanız gerekiyor. Eğer farklı ağlardaysanız, harici ip adresini yerel ip adresinde açtığınız bir port’a yönlendirmeniz gerekiyor.

nasıl yapıcaz hiç bilgimiz yok

Port yönlendirmeyi modem arayüzünü kullanarak yapacaksınız.

bir şey sorucam diğer server kullanan uygulamalrda neden böyle uğraşmıyoruz

Diğer server kullanan uygulamalar derken?

eve online gibi veya dropboxın python ile yaptığı mesajlaşma uyg gibi

Dropbox’ın kendi sunucusu var, istemciler doğrudan dropbox’a bağlanıyor.

biz bir chat uygulaması yapıcaz ama bunu yapamadık bunun için ne yapmamız lazım
yani anladım böyle modem üzerinden uğraşıyoruz ama normal bir kullanıcı bunları yapmak istemez ne yapmalıyız

Dostum normal bir kullanıcıya istemci'yi vereceksiniz zaten. Sunucu sizde kalacak.

haa sunucuyu mu böyle bağlıcaz

Aynen, istemcinin bir şey yapmasına gerek yok. Ancak şöyle bir durum var. Siz modem’e her reset attığınızda ip adresiniz değişecek. Muhtemelen dinamik bir ip kullanıyorsunuz. Bir algoritma geliştirip, istemcinin güncel ip adresine ulaşmasını sağlayabilirsiniz. Veya sabit bir ip adresinizin olması gerekiyor.

1 Beğeni

socket ile uğraşmak bu kadar uğraştırıcımı ya :slightly_frowning_face: