UDP 파일 소켓프로그래밍중에 중간에 파일이 끊기는데 어떻게 해야되나요~
글쓴이: segenny / 작성시간: 목, 2006/01/19 - 5:57오후
안녕하세요.
C 언어 배운지 한달밖에 안되는 초짜입니다. 근데 프로젝트에 참가하게 되서 무작정 시작한건데 마니 막히네요..
Socket programing 중에 너무나 힘들어서 도움부탁드릴께요
소스를 첨부할께요
직접 올릴려고 하니 정리가 안된 소스라..
로봇트 팔다리 붙이듯히 코딩하려니 몇가지 안되는게 많아서요.
1. 파일 송수신중에 서버 클라이언트가 패닉상태가 들어가요.
2. 어쩔땐 파일을 받는 클라이언트의 버퍼에 남은 용량 가지고 오지 못해 패닉상태이기도 하고요.
UDP 특성상 그렇다고 하지만서도
TCP 와 같은 효과를 낼수 있거나 간단한 프로토콜을 만들어서
해야하는지
프로토콜을 만들어서 해야된다면 어떻게 해야하는지..
알려주세요 ~~ ㅠㅠ
그나저나 마니 활동도 안했는데 불쑥.. 이렇게 질문드려서..죄송합니다! ^^
File attachments:
첨부 | 파일 크기 |
---|---|
udpclient.c | 4.56 KB |
udpserver.c | 4.42 KB |
Forums:
작업환경은 linux gcc 입니다 언어는 C 이고요~
이상입니다
안된다고 하지말고 아니라고 하지말고 어떻게~!
된다!고요~~
저도 예전에 무선 인터넷 환경에서 브로드캐스팅을 하기 위해 UDP를 사용
저도 예전에 무선 인터넷 환경에서 브로드캐스팅을 하기 위해 UDP를 사용했었는데요..
전 그때 생각하기를 "아무리 UDP라고해도 이렇게 환경이 깨끗하게 설정되어 있는데 별 문제 있겠어?"라고 생각했는데..
의외로 거의 대부분을 받지 못하고 잃어버리더군요..
뭐 저야 패킷하나로 존재여부만 알리는 신호였기 떄문에..
연속 3번씩 30초마다 날리는 거로 대신해 버렸습니다.
연속적인 내용을 처리하려면..
무언가 일련번호를 담아서 보내고 일련번호가 끊기면 거기서부터 다시 보내라고 신호를 보내거나..
아니면 TCP가 하는 방법 중에 일부를 간단하게 구현해서 사용하시면 될 것같습니다.
하지만 파일전송같은 것은 가능하다면 TCP로....
ㅡ_ㅡ;
udp는 unreliable한 프로토콜입니다. 중간에 데이터를 손실할 수
udp는 unreliable한 프로토콜입니다. 중간에 데이터를 손실할 수 있습니다.
또한, 순서가 바뀔수도 있습니다. 이 경우에는 라우터를 다수개 거친다는 가정이 있지요. 즉, 멀리 보낼때 해당됩니다. 또한, 중복되게 데이터가 올수 있습니다. 라우터와 라우터사이에서 이런일의 원인을 제공합니다.
따라서, 데이터를 손실한 경우는 지극히 정상입니다. 윈도우에서 수행시 정상전달된 것은 윈도우가 좋아서가 절대로 아닙니다. 타이밍이 좋아서라고 보는게 맞습니다. 유닉스에서 보낼때, 매 sendto()호출할때 usleep()을 주어서 수백밀리초동안 쉬도록해보십시요. 그리고 전송을 해보세요. 아마도 모든 데이터가 정상적으로 수신될 가능성이 높습니다.
만일 데이터의 손실을 원치않는다면, udp를 신뢰성있게 하는 프로그램을 짜거나(스티븐스책에도 예제가 있음), 아니면 tcp를 사용하는 방법이 있습니다.
[quote="Anonymous"]udp는 unreliable한 프로토콜
최근에는 Reliable UDP 프로토콜 개념도 도입중인 추세입니다. FreeBSD에는 바로 Reliable UDP가 도입되어 있습니다. STCP프로토콜도 인터페이스 자체가 바뀔때에도 세션을 유지하면서 다른 인터페이스로 전달해주는 데이터그램 프로토콜입니다.
you must know the power of dark side.
너무나 감사합니다.~~
처음으로 올린건데.. 감사해요~~
잘 알겠습니다. UDP 특성을 살리고 데이터를 안전하게 살리고 싶은데
프로토콜을 수정해야되나요??
대신해 RTP 로 구현할때 어렵나요???
안된다고 하지말고 아니라고 하지말고 어떻게~!
된다!고요~~
댓글 달기