Socket DGRAM connecté avec un délai de rétention (python2.7)
Bonjour
Je dois écrire un programme qui envoie une réponse après un délais de rétention ou il n'envoie pas de réponse du tout avec une probabilité p (le taux de perte d'écho). Le taux de perte est constante.
L'application est une socket DGRAM en mode connecté.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#!/usr/bin/python
# UDP echo application en mode connecte
import sys
import random
from socket import socket, AF_INET6, SOCK_DGRAM
#---------------------------------------------------------
host = sys.argv.pop() if len(sys.argv) == 3 else '::1'
s = socket(AF_INET6, SOCK_DGRAM)
server = (host,1089)
rate = 5
if sys.argv[1:] == ['client']:
s.connect(server)
print "?:"
string = sys.stdin.readline()
# string=raw_input("?:") # wait an input from keyboard
s.send(string)
data, addr = s.recv(1024)
print "> from: ", addr, "data: ", data
elif sys.argv[1:] == ['server']:
p=random.random()
s.bind(server)
if p<=rate:
print "packet dropped"
continue
else:
wait=p*6
print "packet delayed"
time.sleep(wait)
print "waiting....."
data, addr = s.recvfrom(1024)
print "Request from", addr
print " > ", len(data)
n=s.sendto(data,addr)
else:
print >>sys.stderr, 'usage: %s server|client [address]'%(sys.argv[0])
s.close()
sys.exit(0) |
mais je n'arrive pas mettre en place tous cela
je me suis basé sur ce programme que j'ai fait avant.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
#!/usr/bin/python
# UDP echo application en mode connecte
import sys
from socket import socket, AF_INET6, SOCK_DGRAM
#---------------------------------------------------------
host = sys.argv.pop() if len(sys.argv) == 3 else '::1'
s = socket(AF_INET6, SOCK_DGRAM)
server = (host,1089)
if sys.argv[1:] == ['client']:
s.connect(server)
print "?:"
string = sys.stdin.readline()
# string=raw_input("?:") # wait an input from keyboard
s.send(string)
data, addr = s.recv(1024)
print "> from: ", addr, "data: ", data
elif sys.argv[1:] == ['server']:
s.bind(server)
while 1:
print "waiting....."
data, addr = s.recvfrom(1024)
print "Request from", addr
print " > ", len(data)
n=s.sendto("%d"%len(data), addr)
else:
print >>sys.stderr, 'usage: %s server|client [address]'%(sys.argv[0])
s.close()
sys.exit(0) |