2014-06-12 1 views
0

UDP를 통해 노트북 (Linux)에서 Android 디바이스로 데이터 전송을 구현하려고합니다. 노트북에 android, netcat : UDP를 통해 2048 바이트 이상 보내는 법

나는 시작 :

cat /home/me/my/file.txt | nc -u 192.168.150.3 12345 

또는 :

nc -u 192.168.150.3 12345 < /home/me/my/file.txt 

같은 결과를 얻는.

Android 기기에 내 코드는 다음과 같습니다

byte[] msg = new byte[100000]; 

DatagramPacket p = new DatagramPacket(msg, msg.length); 
DatagramSocket s = new DatagramSocket(portNumber); 
s.receive(p); 

message = new String(msg, 0, p.getLength()); 

s.close(); 

내가 = 맞아 100000을 msg.length을 볼 수 있습니다 "메시지 ="와 함께 줄에 중단 점을 설정합니다. 하지만 p.getLength()는 단지 2048입니다. 즉, 내 데이터의 일부만 전송된다는 의미입니다. "message"에 "file.txt"에있는 모든 데이터가 포함되어 있지 않다는 의미입니다. 왜 그렇게됩니까? 내가 뭘 잘못 했니?

답변

1

nc는 전체 파일을 단일 UDP 패킷으로 보내지 않으므로 수신하기 위해 단일 호출에서 가져올 것으로 기대하지 마십시오. 모든 것이 완료 될 때까지 수신을 여러 번 호출해야합니다. 물론 UDP를 사용하면 "연결 종료"가 발생하지 않으므로 모든 데이터를 가지고 있음을 나타내는 다른 표시기가 있어야합니다. 그리고 UDP 패킷은 조용히 잃어 버리거나 재정렬 될 수 있으므로 원하는 방식으로 파일을 가져올 수 있다고 보장 할 수 없습니다.

+0

감사합니다. 그건 내 의심 이었어. 어쩌면 netcat이 udp를 통해 파일을 보낸 후에 무엇을 기다리는 지 알 수 있습니까? – user3137385

+0

@ user3137385 : netcat은 피어의 데이터를 기다립니다. UDP에 파일 끝이나 연결이 없기 때문에 죽일 때까지 기다릴 것입니다. –

+0

udp를 통해 매 초마다 파일을 보내야하는 스크립트를 작성하고 싶습니다. 저것을 자동으로 기다리는 어떤 가능성든지 있는가? – user3137385

관련 문제