Python Socket geht nicht?
Moin,
mein Client Code stürzt immer ab.
# Server Code
import socket
class txt_chat:
def __init__(self):
self.IP_SERVER = socket.gethostbyname(socket.gethostname())
self.DISCONNECT_MESSAGE = "!DISCONNECT"
def start(self):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind( (self.IP_SERVER, 5050) )
print("Server gestartet")
server.listen()
conn, addr = server.accept()
print(f"Client with IP {conn} connected")
while True:
msg = server.recv(1024)
msg.decode("utf-8")
print(f"Message: {msg}")
if msg == self.DISCONNECT_MESSAGE:
server.close()
conn.close()
txt = txt_chat()
txt.start()
# Client Code (Der nicht funktioniert)
import socket
class txt_chat:
def start():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.connect( ("192.168.1.14", 5050) )
while True:
msg = str(input("Your Message: "))
msg = msg.encode()
server.send(msg)
answer = server.recv(1024)
answer = answer.decode("utf-8")
print(f"Antwort: {answer}")
txt = txt_chat()
txt.start()
#Error
Traceback (most recent call last):
File "C:\Users\User\OneDrive\Python\client2.py", line 18, in <module>
txt.start()
TypeError: start() takes 0 positional arguments but 1 was given
Wenn dein Client abstürzt, tut er das sicherlich auch mit einem Fehler. Bitte diesen auch noch posten.
Erledigt
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Informatik
TypeError: start() takes 0 positional arguments but 1 was given
Das ist kein "Absturz", und die Fehlermeldung weist darauf hin, was du falsch gemacht hast. Es handelt sich deinem Aufruf nach um eine Objektmethode, die automatisch die jeweilige Instanz übergeben bekommt. Du hast diese aber nicht als Parameter (üblich ist "self") deklariert:
class txt_chat:
def start():
(Auch das ist aber wieder ein Beispiel für mäßig sinnvolle Verwendung von OOP. Diese Programme gewinnen eigentlich nichts dadurch, dass sie in Klassen gesteckt werden.)
@Saibotix07
Okay neuer Code neues Glück:
#Server
import socket
ip_input = input("Gib deine IP an: ")
ip_input = str(ip_input)
IP_SERVER = ip_input
DISCONNECT_MESSAGE = "!DISCONNECT"
def start():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind( (IP_SERVER, 5050) )
print("Server gestartet")
server.listen()
conn, addr = server.accept()
print(f"Client with IP {conn} connected")
while True:
msg = server.recv(1024)
msg.decode("utf-8")
print(f"Message: {msg}")
if msg == DISCONNECT_MESSAGE:
server.close()
conn.close()
if __name__ == "__main__":
start()
#Client
import socket
def start():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.connect( ("192.168.1.100", 5050) )
while True:
msg = str(input("Your Message: "))
msg = msg.encode()
server.send(msg)
answer = server.recv(1024)
answer = answer.decode("utf-8")
print(f"Antwort: {answer}")
if __name__ == "__main__":
start()
#Error
Gib deine IP an: 192.168.1.100
Server gestartet
Client with IP <socket.socket fd=372, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.1.100', 5050), raddr=('192.168.1.100', 60324)> connected
Traceback (most recent call last):
File "c:\Users\User\OneDrive\Python\Server_2.py", line 26, in <module>
start()
File "c:\Users\User\OneDrive\Python\Server_2.py", line 17, in start
msg = server.recv(1024)
OSError: [WinError 10057] Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde
Davon abgesehen dass es noch lange nicht fertig ist und oop eine verwendung bekommt