2017-05-26 3 views
0

Als ich die progrem unten zwischen zwei Computern auf dem gleichen WiFi-Python läuft, bekomme ich den nächsten Fehler:Warum bekomme ich einen Errno 10057 Socket-Fehler in Python?

Traceback (most recent call last): 
    File "Server.EX.py", line 10, in <module> 
     des1 = s.recv(1024) 
    socket.error: [Errno 10057] A request to send or receive data was  
    disallowed because the socket is not connected and (when sending on a 
    datagram socket using a sendto call) no address was supplied 

Das Programm Server.py auf einem Computer läuft:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((///Computer 1 IP///, 1729)) 
s.listen(1) 
conn, address = s.accept() 
print("Connection started.Enter 0 to finish connection.") 
des1 = 1 
while des1 != 0: 
    des1 = s.recv(1024) 
    print(des1) 
    conn.send(raw_input("SERVER: ")) 
conn.close() 
s.close() 

Das Programm-Client Py läuft auf dem zweiten Computer:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((///Computer 1 IP///, 1729)) 
print("Connection started. Enter 0 to finish connection.") 
des1 = 1 
while des1 != 0: 
    s.send(raw_input("CLIENT: ")) 
    des1 = s.recv(1024) 
    print(des1) 
s.close() 

jemand mir mit, dass bitte helfen kann (-:

* Hinweis, dass /// Computer 1 IP /// ist eine tatsächliche IPv4-Adresse

Antwort

0

Ein Serversocket (s, in Ihrem server.py) existiert nur Client-Verbindungen zu akzeptieren; Der Rückgabewert von .accept() enthält den verbundenen Socket (conn in Ihrem Code), den Sie für die gesamte Kommunikation mit diesem bestimmten Client verwenden werden. Sie verwenden conn für den Aufruf von .send() korrekt, verwenden jedoch s falsch, um .recv() aufzurufen.

+0

verändert es dank aber jetzt gibt es dieses Problem: socket.error: [Errno 10048] Nur eine Verwendung einzeln Socketadresse (Protokoll/Netzwerkadresse/Port) normalerweise –

+0

Eine Kombination bestimmte Adresse/Port erlaubt ist, ist Wird nach dem Schließen eines Sockets für einen bestimmten Zeitraum verwendet, um mit eventuell noch anhaftendem Netzwerkverkehr fertig zu werden. Setzen Sie 's.setsockopt (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)' unmittelbar nach der Erstellung des Sockets, um diese Funktion auszuschalten. – jasonharper

Verwandte Themen