2016-06-27 5 views
0

私はUDPソケットを使用して画像を送信しており、チェックサムやシーケンス番号などの情報を各パッケージに追加したいと考えています。udpソケットに情報を追加するには?

ここでは、コードです:

client.py

import socket 
import sys 

UDP_IP = "127.0.0.1" 
UDP_PORT = 5005 

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
sock.bind((UDP_IP, UDP_PORT)) 

buf = 1024 
f = open("image2.png",'wb') 

data , addr = sock.recvfrom(buf) 
while True: 
    print "PACKAGE RECEIVED..." 
    f.write(data) 
    data, addr = sock.recvfrom(buf) 

とserver.py

私はUDPヘッダにフィールドを追加したり、各UDPに追加情報を追加することができますどのように
import socket 
import sys 
UDP_IP = "127.0.0.1" 
UDP_PORT = 5005 

print "UDP target IP:", UDP_IP 
print "UDP target port:", UDP_PORT 

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

f=open ("image.png", "rb") 
print sys.getsizeof(f) 
buf = 1024 
data = f.read(buf) 
while (data): 
    if(sock.sendto(data,(UDP_IP,UDP_PORT))): 
     print "sending ..." 
     data = f.read(buf) 

は、ソケット、例えば:シーケンス番号を追加する?

答えて

0

イメージを送信している場合は、問題が発生したり、パケットが失われたりすることなく、イメージを完全に配信したいと思います。あなたは少し遅れを取る必要はありません。UDPはあなたにそれを与えます。あなたのアプリケーションにはTCPソケットを使用したいと思います。彼らは、送信されたすべてのパケットをオーダーで受信したことを確認します。また、誰かが送信するものを聞くのではなく、特定のユーザーとの接続を形成します。ここではtcp sockets in pythonについて読むことができます。

UDPソケットを使用してTCPソケットの動作をシミュレートできます。もしそれをしたいのであれば、この情報をすべてパケットに埋めなければならないと思います。チェックサムなどを保持して処理するために、特定のビット数を予約することができます。

+0

ちょうど私はUDPパケットを使ってtcpプロトコルのシミュレーションを実行する必要がありますが、情報をUDPパケットにカプセル化する方法の例が必要です。 –

+0

それから、どんな情報をそこに残しておきたいのかと思ってください。私は、必要に応じて、パディング付きの固定サイズのフレームに行くだろう。この情報については、おそらくいくつかの種類のチェックサム、多分いくつかのフレームが必要です。それはあなたが達成したいと思うものによって異なります。また、おそらくパケットが失われたときにパッケージを再送信する要求を処理する必要があります。 TCPにはたくさんの素晴らしい機能がありますが、それらのすべてが必要なわけではないので、本当に必要なものに集中してみてください。 – fulaphex

関連する問題