2016-09-11 3 views
0

파이썬 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) 패킷을 작은 1400 바이트로 분해해야하기 때문입니다. 그렇지 않으면 IP 단편화에 의존하고 조각 하나가 손실되는 경우 전체 파일이 손실됩니다. 파일 전송에는 모든 것이 안정적으로 전송되어야하므로 UDP를 사용하여 이러한 모든 문제를 해결해야합니다.

다른 한편으로 TCP는 이미이 모든 작업을 수행하고 있으며 안정적이며 혼잡 제어가 가능하며 유비쿼터스입니다. TCP 위에있는 HTTP를 통해이 웹 페이지를보고 있습니다.

+0

이것은 UDP로 어떻게해야하는지에 대한 질문에 대답하지 않습니다. UDP는 대용량 파일을 전송하는 데 사용할 수 있으며 대용량 파일을 전송하는 데 사용됩니다. UDP와 유사한 신뢰성 메커니즘 (예 : [QUIC 프로토콜] (https://en.wikipedia.org/) wiki/QUIC)) 또는 잠재적 인 데이터 손실을 (실시간 비디오 스트리밍 에서처럼) 받아들입니다. –

+0

예,하지만 UDP를 사용하여 그것을하기로되어 있으므로 어떻게 할 수 있는지 궁금합니다. – Rohan

+0

UDP는 사용할 수 있지만 OP로 판단하면 (처음부터 시작하여 기존의 큰 파일을 전송하는 경우) 스트리밍 라이브가 아님) 자신의 프로토콜을 작성하는 것은 어리석은 짓이며 내 대답을 기다립니다. 진지하게, UDP를 명령하는 사람에게 돌아가서 TCP보다 나쁜 것을하기 위해 자신의 프로토콜을 개발하는 6 개월을 설명하라. alread는 가치가 없다. – markmnl