2016-09-11 31 views
0

Python 3.5のUDPソケットを使用して、クライアントからローカルホストのサーバーに大きなファイル(ビデオ、オーディオ)を転送するにはどうすればよいですか?小さな.txtファイルを送信できましたが、他のファイルタイプは送信できませんでした。私に提案してください。 ありがとうございました!UDPソケットファイル転送python 3.5

ここに私のコードは、テキストファイルを転送することです。

クライアントコード:

import socket 
import sys 

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

host = '127.0.0.1' 
port=6000 

msg="Trial msg" 

msg=msg.encode('utf-8') 

while 1: 

    s.sendto(msg,(host,port)) 
    data, servaddr = s.recvfrom(1024) 
    data=data.decode('utf-8') 
    print("Server reply:", data) 
    break 
s.settimeout(5) 

filehandle=open("testing.txt","rb") 

finalmsg=filehandle.read(1024) 

s.sendto(finalmsg, (host,port)) 

サーバコード:

import socket 

host='127.0.0.1' 

port=6000 

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

s.bind(("",port)) 

print("waiting on port:", port) 

while 1: 

    data, clientaddr= s.recvfrom(1024) 
    data=data.decode('utf-8') 
    print(data) 
    s.settimeout(4) 
    break 

reply="Got it thanks!" 

reply=reply.encode('utf-8') 

s.sendto(reply,clientaddr) 

clientmsg, clientaddr=s.recvfrom(1024) 
+0

あなたのコードを教えていただけますか? –

+0

確かに。私は元のポストにそれを追加しました – Rohan

+0

UDPは信頼性の低いプロトコルなので、いくつかの信頼性レイヤーを追加する必要があります。これは簡単な作業ではなく、単一のパケットを送受信するだけの簡単なコード例にこのすべてを追加することで、問題が広すぎます。しかし、より多くのデータを転送するために複数の送受信を使用することから始めることもできます。それ以外は、SOで質​​問するときに適切なコードフォーマットを使用する方法を学んでください。 –

答えて

0

TCPを使用し、大容量のファイルを転送するためUDPを使用しないでください。

あなたが送信したすべてのパケットが到着すると、UDPは応答しません。また、到着すると、それらも複製されることさえあります。さらに、UDPは大規模な転送には適していません。なぜなら、1)輻輳制御がないため、ネットワークに氾濫してパケットが破棄され、2)小規模なパケットに分割する必要があります。あなたがIP断片化に頼っていて、1つのフラグメントが失われた場合、MTUを維持することをお勧めします。ファイル転送はすべて確実に送信する必要があるため、これらの問題をすべてUDPで修正するカスタムコードを書く必要があります。

TCPはすでにこれをすべて実行しており、信頼性が高く、輻輳制御があり、ユビキタスなので、TCP上にHTTP経由でこのWebページを表示しています。

+0

これはUDPでそれを行う方法である質問に答えるものではありません。 UDPは大きなファイルを転送するために使用することができ、大きなファイルを転送するために使用されますが、UDPの上にTCPと同様の信頼性メカニズムを追加する必要があります([QUICプロトコル](https://en.wikipedia.org/ wiki/QUIC))、潜在的なデータ損失を受け入れる(リアルタイムビデオストリーミングなど)。 –

+0

ええ、でも、私はUDPを使ってやるべきだと思っていました。どうすればいいのかなと思っていました。 – Rohan

+0

私はUDPを使うことができますが、OPから判断すると(ゼロから始めて、ライブストリーミングではない)自分のプロトコルを書くのは愚かであり、私は自分の答えに立っている。真剣に、UDPを義務づけている人に戻り、TCPよりも悪いことをする独自のプロトコルを6ヶ月間開発することを説明する。 – markmnl

関連する問題