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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)