UDP 파일 소켓프로그래밍중에 중간에 파일이 끊기는데 어떻게 해야되나요~

segenny의 이미지

안녕하세요.
C 언어 배운지 한달밖에 안되는 초짜입니다. 근데 프로젝트에 참가하게 되서 무작정 시작한건데 마니 막히네요..
Socket programing 중에 너무나 힘들어서 도움부탁드릴께요

소스를 첨부할께요

직접 올릴려고 하니 정리가 안된 소스라..

로봇트 팔다리 붙이듯히 코딩하려니 몇가지 안되는게 많아서요.

1. 파일 송수신중에 서버 클라이언트가 패닉상태가 들어가요.
2. 어쩔땐 파일을 받는 클라이언트의 버퍼에 남은 용량 가지고 오지 못해 패닉상태이기도 하고요.
UDP 특성상 그렇다고 하지만서도
TCP 와 같은 효과를 낼수 있거나 간단한 프로토콜을 만들어서
해야하는지
프로토콜을 만들어서 해야된다면 어떻게 해야하는지..

알려주세요 ~~ ㅠㅠ

그나저나 마니 활동도 안했는데 불쑥.. 이렇게 질문드려서..죄송합니다! ^^

File attachments: 
첨부파일 크기
파일 udpclient.c4.56 KB
파일 udpserver.c4.42 KB
segenny의 이미지

이상입니다

안된다고 하지말고 아니라고 하지말고 어떻게~!

된다!고요~~

tinywolf의 이미지

저도 예전에 무선 인터넷 환경에서 브로드캐스팅을 하기 위해 UDP를 사용했었는데요..
전 그때 생각하기를 "아무리 UDP라고해도 이렇게 환경이 깨끗하게 설정되어 있는데 별 문제 있겠어?"라고 생각했는데..
의외로 거의 대부분을 받지 못하고 잃어버리더군요..
뭐 저야 패킷하나로 존재여부만 알리는 신호였기 떄문에..
연속 3번씩 30초마다 날리는 거로 대신해 버렸습니다.

연속적인 내용을 처리하려면..
무언가 일련번호를 담아서 보내고 일련번호가 끊기면 거기서부터 다시 보내라고 신호를 보내거나..
아니면 TCP가 하는 방법 중에 일부를 간단하게 구현해서 사용하시면 될 것같습니다.

하지만 파일전송같은 것은 가능하다면 TCP로....

ㅡ_ㅡ;

익명 사용자의 이미지

udp는 unreliable한 프로토콜입니다. 중간에 데이터를 손실할 수 있습니다.
또한, 순서가 바뀔수도 있습니다. 이 경우에는 라우터를 다수개 거친다는 가정이 있지요. 즉, 멀리 보낼때 해당됩니다. 또한, 중복되게 데이터가 올수 있습니다. 라우터와 라우터사이에서 이런일의 원인을 제공합니다.

따라서, 데이터를 손실한 경우는 지극히 정상입니다. 윈도우에서 수행시 정상전달된 것은 윈도우가 좋아서가 절대로 아닙니다. 타이밍이 좋아서라고 보는게 맞습니다. 유닉스에서 보낼때, 매 sendto()호출할때 usleep()을 주어서 수백밀리초동안 쉬도록해보십시요. 그리고 전송을 해보세요. 아마도 모든 데이터가 정상적으로 수신될 가능성이 높습니다.
만일 데이터의 손실을 원치않는다면, udp를 신뢰성있게 하는 프로그램을 짜거나(스티븐스책에도 예제가 있음), 아니면 tcp를 사용하는 방법이 있습니다.

jongwooh의 이미지

Anonymous wrote:
udp는 unreliable한 프로토콜입니다. 중간에 데이터를 손실할 수 있습니다.

최근에는 Reliable UDP 프로토콜 개념도 도입중인 추세입니다. FreeBSD에는 바로 Reliable UDP가 도입되어 있습니다. STCP프로토콜도 인터페이스 자체가 바뀔때에도 세션을 유지하면서 다른 인터페이스로 전달해주는 데이터그램 프로토콜입니다.

you must know the power of dark side.

segenny의 이미지

처음으로 올린건데.. 감사해요~~

잘 알겠습니다. UDP 특성을 살리고 데이터를 안전하게 살리고 싶은데

프로토콜을 수정해야되나요??

대신해 RTP 로 구현할때 어렵나요???

안된다고 하지말고 아니라고 하지말고 어떻게~!

된다!고요~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.