无法连接2台计算机的客户端/服务器

时间:2020-11-07 18:06:02

标签: python sockets server client

我有2个不同的程序,一个客户端和一个服务器,我尝试将2台计算机与它们连接。当我在同一台计算机上测试该程序时,它可以工作,这两个程序链接在一起。 但是,当我使用两台不同的计算机时,即使它们连接在同一个Wifi上,它们也拒绝彼此链接,但它们始终在寻找另一台计算机,而从未找到彼此。 我使用Internet上发现的不同模型,它们使用的客户端/服务器模型完全相同,我只是在适当的窗口中对它们进行了调整,但我不知道为什么它拒绝工作。 我在Windows 10上使用Python 3.9.0。 非常感谢您的帮助,您可以在下面找到这两个程序。

客户

import threading
import socket
from tkinter import *

def demarrer():
    global s#####
    bouton_demarrer["state"],bouton_stop["state"]="disable","normal"
    texte_bis.config(text="\u2B55 Waiting connexion",fg="orange")
    s=socket.socket()
    threading.Thread(target=lancement_client,daemon=True).start()

def lancement_client():
    try:
        s.connect(("127.0.0.1",12345))
        texte_bis.config(text="\u2714 Successful connexion",fg="green")
        bouton_envoyer["state"],saisie["state"]="normal","normal"
        hostname = socket.gethostname()
        print(f"Hostname : {hostname}")
        ip_address = socket.gethostbyname(hostname)
        print(f"IP Address : {ip_address}")
        try:
            while True:
                rcvdData=s.recv(1024).decode()
                print("Server :",rcvdData)
        except:stop()
    except:
        print("Délai dépassé")
        stop()

def envoyer():
    s.send(msg.get().encode())
    msg.set("")

def stop():
    s.close()#####
    try:c.close()#####
    except:pass#####
    texte_bis.config(text="\u2716 Connexion lost",fg="red")
    bouton_demarrer["state"],bouton_envoyer["state"],bouton_stop["state"],saisie["state"]="normal","disable","disable","disable"
    msg.set("")

fenetre=Tk()
fenetre.geometry("{}x{}+{}+{}".format(500,200,400+300,200))
texte=Label(fenetre,text="CLIENT",font=25)
texte.pack()
bouton_demarrer=Button(fenetre,text="Démarrer",font=25,command=demarrer)
bouton_demarrer.pack()
texte_bis=Label(fenetre,font=25)
texte_bis.pack()
msg=StringVar()
saisie=Entry(fenetre,textvariable=msg,font=25,state="disable")
saisie.pack()
bouton_envoyer=Button(fenetre,text="Envoyer",font=25,command=envoyer,state="disable")
bouton_envoyer.pack()
bouton_stop=Button(fenetre,text="Stop",font=25,command=stop,state="disable")
bouton_stop.pack()
fenetre.mainloop()

服务器

import threading
import socket
from tkinter import *

def demarrer():
    global s#####
    bouton_demarrer["state"],bouton_stop["state"]="disable","normal"
    texte_bis.config(text="\u2B55 Waiting connexion",fg="orange")
    s=socket.socket()
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    port=12345
    s.bind(("",port))
    s.listen(5)
    threading.Thread(target=lancement_server,daemon=True).start()

def lancement_server():
    global c#####
    try:
        c,addr=s.accept()
        texte_bis.config(text="\u2714 Successful connexion",fg="green")
        bouton_envoyer["state"],saisie["state"]="normal","normal"
        hostname=socket.gethostname()
        print(f"Hostname : {hostname}")
        ip_address = socket.gethostbyname(hostname)
        print(f"IP Address : {ip_address}")
        try:
            while True:
                rcvdData=c.recv(1024).decode()
                print("Client :",rcvdData)
        except:stop()
    except:stop()

def envoyer():
    c.send(msg.get().encode())
    msg.set("")

def stop():
    s.close()#####
    try:c.close()#####
    except:pass#####
    texte_bis.config(text="\u2716 Connexion lost",fg="red")
    bouton_demarrer["state"],bouton_envoyer["state"],bouton_stop["state"],saisie["state"]="normal","disable","disable","disable"
    msg.set("")

fenetre=Tk()
fenetre.geometry("{}x{}+{}+{}".format(500,200,400-300,200))
texte=Label(fenetre,text="SERVER",font=25)
texte.pack()
bouton_demarrer=Button(fenetre,text="Démarrer",font=25,command=demarrer)
bouton_demarrer.pack()
texte_bis=Label(fenetre,font=25)
texte_bis.pack()
msg=StringVar()
saisie=Entry(fenetre,textvariable=msg,font=25,state="disable")
saisie.pack()
bouton_envoyer=Button(fenetre,text="Envoyer",font=25,command=envoyer,state="disable")
bouton_envoyer.pack()
bouton_stop=Button(fenetre,text="Stop",font=25,command=stop,state="disable")
bouton_stop.pack()
fenetre.mainloop()

0 个答案:

没有答案