0
Server Code:Python-Sockets - Client nicht UDP-Datagramm empfangen
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # server UDP socket
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # bypass OS lock on port
s.bind((socket.gethostname(), 9999)) # bind socket to host and port 9999
while True:
message, ip = s.recvfrom(1024) # receive data passed through socket
print "Server:\n\tMessage \"{}\" received...\n\tIt has a length of {}".format(
message, len(message))
s.sendto(str(len(message)), (socket.gethostname(), 9999)) # send message length in bytes back to client
s.close() # close UDP connection with client
sys.exit(0) # terminate server process
Code Auftraggeber:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((socket.gethostname(), 9999))
message = "Pointless text."
print "Client:\n\tSending message \"{}\" to the server...\n\tIt has a length of {}".format(
message, len(message))
s.sendto(message, (socket.gethostname(), 9999))
while True:
response, ip = s.recvfrom(1024)
if int(response) == len(message):
print "Client:\n\tThe server returned count {} which is equal to the client's count of {}.".format(response, len(message))
else:
print "Client:\n\tThe server returned count {} which is not equal to the client's count of {}.".format(response, len(message))
s.close()
Ausgang:
Running client in UDP mode...
Running server in UDP mode...
Client:
Sending message "Pointless text." to the server...
It has a length of 15
Server:
Message "Pointless text." received...
It has a length of 15
Die Client-Seite recvfrom
wird nie ausgelöst und ich kann nicht herausfinden, warum.
Hier sind die komplette client und server Dateien, wenn Sie sie direkt auf Ihrem Rechner testen wollen, wie so:
python2.7 server udp & python2.7 client udp
Danke Sir. Ich nahm den Client-Code 's.connect ((socket.gethostname(), 9999))' würde den Client-Socket für den Empfang auf Port 9999 und den Client-Code 's.sendto (Nachricht, (socket.gethostname(), 9999 konfigurieren)) 'würde den Socket so konfigurieren, dass er an Port 9999 sendet ... Kannst du erklären, warum die Adresse in' connect() 'notwendig ist, wenn der Empfangsport nicht konfiguriert ist und' sendto() 'den Zielport behandelt? – aweeeezy
Eigentlich habe ich gerade meine eigene Frage beantwortet - das Entfernen der 'connect()' Zeile hat keine Auswirkungen auf mein Programm. – aweeeezy