В моей программе используется следующая схема:
Клиент - промежуточный маршрутизатор - сервер
Клиент и маршрутизатор связаны по TCP-соединению.Маршрутизатор и сервер имеют соединение UDP.Я отправляю данные следующим образом:
messagetobesend = "some very long message to be send"
sock = socket(AF_INET,SOCK_STREAM)
# bind my port to the socket
sock.bind((IP,PORT))
sock.connect((routerip, routerport))
# since I'm using TCP, send the data byte by byte
for i in range(len(messagetobesend)):
sock.send(messagetobesend[i])
# now, I have send all of the message
sock.close()
В маршрутизаторе у меня есть следующее:
sock = socket(AF_INET,SOCK_STREAM)
sock.bind((ip, port))
sock.listen(1)
# I have accepted the TCP connection
newsocket, addr = sock.accept()
# now create a UDP socket
udpsock = socket(AF_INET,SOCK_DGRAM)
udpsock.bind((myudpip, myudpport))
while True:
# I want to packetize the data with 128 bytes
data = newsocket.recv(128)
if(data):
data.sendto(udpsock,(serverip,serverport))
else:
#received no data, terminate udp connection
udpsock.close()
newsocket.close()
И сервер:
sock = socket(AF_INET,SOCK_DGRAM)
sock.bind((myip, myport))
while True:
data, addr = sock.recvfrom(128)
#print data
Все, что яделать кажется правильным.Однако сервер обычно получает пакеты размером 128 байт, иногда получает большинство из них 128 байт, а некоторые не 128 байт.
Я что-то здесь не так делаю?Я хочу, чтобы сервер получал все эти пакеты длиной 128 байт (длина всех принятых пакетов должна быть одинаковой)