我有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()