Python: socket - Laufenden Server und Client vom gleichen PC
Hy, ich habe das gerade weitergeleitet, meine ports und mein Python-Server <---> Client-chat funktioniert wie erwartet beim ausführen des client von einem anderen PC.
Wenn ich versuche, schließen Sie den client aus meinem eigenen PC (wo liegt die Datei-server selbst), dann bekomme ich seine Fehler:
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
Q1: Dies bedeutet, dass nur 1 app kann die Verbindung zu einem bestimmten port, richtig?
Q2: Wie kann ich mich entwickeln, mein Server und mein Client auf dem gleichen PC dann?
(Ich habe keinen anderen PC um es zu tun)
Wenn nötig, hier ist mein code. (ich habe gerade angefangen, also NICHT BEURTEILEN)
SERVER:
from tkinter import *
#from mysql.connector import (connection)
import socket
from _thread import *
import sys
root = Tk()
T = Text(root, height=2, width=30)
T2 = Text(root, height=2, width=30)
B = Button(root, text="Send")
T.pack(side=LEFT,fill=X)
T2.pack(side=TOP,fill=X)
B.pack(side=LEFT,fill=X)
#statick ip
host = 'x.x.x.x'
port=yyyy
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
try:
s.bind((host,port))
except socket.error as e:
print(str(e))
s.listen(5)
print("waiting for connection")
def threaded_client(conn):
conn.send(str.encode("Connection with the server established\n"))
while True:
data = conn.recv(2048)
reply = "You: " + data.decode('utf-8')
if not data:
break
conn.sendall(str.encode(reply))
conn.close()
while True:
conn, addr = s.accept()
print('connected to: '+ addr[0]+':'+str(addr[1]))
start_new_thread(threaded_client,(conn,))
root.mainloop()
CLIENT:
from tkinter import *
import socket
print("everything is imported")
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("socket is established")
#the public ip
host = 'y.y.y.y'
port=xxxx
s.connect((host,port))
print("s.connect done")
def sendShit(event):
textToSend = T.get("1.0",END)
s.send(str.encode(textToSend))
T2.insert(END, s.recv(1024))
print("sendshit defined")
root = Tk()
T = Text(root, height=2, width=30)
T2 = Text(root, height=2, width=30)
B = Button(root, text="Send")
T.pack(side=LEFT,fill=X)
T2.pack(side=TOP,fill=X)
B.pack(side=LEFT,fill=X)
T.insert(END, "Type here")
T2.insert(END, s.recv(1024))
B.bind("<Button-1>",sendShit)
mainloop()
- Setzen Sie einfach beide Dateien
host = '127.0.0.1'
(das ist Ihrelocalhost
- und set -port
um die gleiche Anzahl (zum Beispiel 6000) - Danke, es funktioniert jetzt
- Habe ich geschrieben als Antwort...Bitte betrachten Sie es akzeptieren, wenn Sie sehen, es hat dir geholfen. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
In beiden Dateien, setzen Sie einfach
host
zulocalhost
oder127.0.0.1
und auchport
zu gleichen port-Nummer in beiden Dateien. sagen Sie zum Beispiel '6000`Schließen Sie alle offenen verbindungen für den server. Manchmal Sie versehentlich verlassen einen server läuft. Wenn Sie möchten, um Ihre HOST-IP-Adresse Ihres Computers, die Sie verwenden können
host = socket.gethostbyname(socket.gethostname())
. Halten Sie die port-Nummer für server und client.