/
gbn_c.py
76 lines (65 loc) · 1.76 KB
/
gbn_c.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import socket #for sockets
import sys #for exit
from check import ip_checksum
# create dgram udp socket
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error:
print 'Failed to create socket'
sys.exit()
host = 'localhost';
port = 8888;
windowSize = 4
base = 1
nextseqnum = 1
pktList = []
n = 1
pktList.append(0)
while(n < 11) :
pktList.append(n)
n = n + 1
old_msg = ''
resend = 0
count =0
while(1) :
if base == 10 :
break
elif nextseqnum < base + windowSize :
msg = str(pktList[nextseqnum])
try :
s.settimeout(3)
if msg == '2' :
if count == 0:
d = ip_checksum(msg+'1')
msg_d = d + msg
msg_seq_d = str(nextseqnum) + msg_d
count = count + 1
else:
d = ip_checksum(msg)
msg_d = d + msg
msg_seq_d = str(nextseqnum) + msg_d
else :
d = ip_checksum(msg)
msg_d = d + msg
msg_seq_d = str(nextseqnum) + msg_d
if nextseqnum < base + windowSize :
print 'sending... PKT' + msg_seq_d[3:]
s.sendto(msg_seq_d, (host, port))
nextseqnum = nextseqnum + 1
''' if nextseqnum < base + windowSize :
s.sendto(msg_seq_d, (host, port))
nextseqnum = nextseqnum + 1
'''
try:
data = s.recvfrom(1024)
reply = data[0]
addr = data[1]
except :
print 'time out!!!'
nextseqnum = base
continue
if reply == str(base) :
base = base + 1
except socket.error, msg:
print 'Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()