0
Code Serveur:prises Python - client ne reçoit pas datagrammes UDP
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 client:
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()
Sortie:
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
Le côté client recvfrom
ne se déclenche jamais et je ne peux pas comprendre pourquoi.
Voici les client et server complets fichiers si vous voulez les tester directement sur votre machine comme ceci:
python2.7 server udp & python2.7 client udp
Merci monsieur. J'ai supposé que le code client 's.connect ((socket.gethostname(), 9999))' configurerait le socket client à recevoir sur le port 9999 et le code client 's.sendto (message, (socket.gethostname(), 9999)) 'configurerait le socket pour envoyer au port 9999 ... pouvez-vous expliquer pourquoi l'adresse dans' connect() 'est nécessaire si elle ne configure pas le port de réception et le' sendto() 'gère le port de destination? – aweeeezy
En fait, je viens de répondre à ma propre question - supprimer la ligne 'connect()' n'affecte pas mon programme. – aweeeezy