소켓 파일 전송에서... 질문있는데여~!!

익명 사용자의 이미지

소켓으로 파일 전송하는 프로그램을 짤려고 하는데여...
서버에서.. 파일을 루프를 사용해서.. send 로 보내고..
클라이언트에서는.. (제가 MFC 로 짰는데..)WSAAsyncSelect를 사용해서
비동기 모드로해.,. FD_READ 메시지가 발생하면 받게 했거든요..
그런데.. FD_READ 메시지가 서버에서 보내는 속도를 못따라가는거 같아
여.. 그래서 파일이 앞에 몇게랑...뒤에 몇게밖에 전송이 안돼는거 같은데
여.. 어떻게 전송하면 돼죠??
다른... 명령이라도 있나여??
아니면.. 보내는거를 느리게 보내야 하나여?? 그럼 속도가 넘 느려지는
데..
좀 알려주세여~~!! 글구.. 패킷을~~ 헤더로 음~ 뭐 해서 나눈다는건 무슨
말인지 아시는지??

익명 사용자의 이미지

안녕하세요...

파일 전송은 서버에서는 동기적으로 보내어 주는데 클라이언트에서 비동기
로 받는다면... 받는건 문제가 없지만은 나중에 파일을 합칠 때 문제가 있
지 않을까 쉽네요...
그리고 중간에 데이터가 사라지는건 크드를 봐야 알겠지만 버그가 아닌가
생각이 드네요...
중간에 데이터가 유실 되는건 일반적인 tcp/ip 에선 이해 하기가 힘든것
같네요...
제가 권해드리고자 하는 방법은 read(), write()함수(in VC++)를 사용해
서 동기적으로 구현을 해보시는게 어떨까 쉽네요...

그리고 패킷을 헤드로 나눈다는것은 UDP나 이런 비동기적 방식을 취할 경
우 전체를 만들 때 각 패킷의 역할을 알아야 하기 때문에 이렇게 구현을
하는 것입니다.
예를 들어...
struct header {
패킷넘버;
패킷역활;
패킷바디; /* 실제로 사용자가 보내고자 하는 자료(정보) */
};
위와 같은 식으로 구성하는 걸 얘기합니다.
그리고 위에서 패킷바디 부분은 따로 떼어내서 구성하기도 합니다.

참고 하시길...

_ 信

익명 사용자의 이미지

서버에서 동기적으로 보낸다는게 무슨말이죠??
비동기는 알겠는데... 글구.. blocking 하고.. not-blocking 도 있던데..
^^; 제가 읽어본책에는... 동기적이 무엇인지 안나와있네여...음..혹시
blocking 이 동기적인가?? 글구. 서버에서 동기적으로 파일을 while 문으
로 보내면.. 클라이언트에서도 while 문으로 파일이 왔을때부터 받아야 하
나여?? 글구 비동기에서 동기로 바꿀려면 어떻게 해야 하나여?? 헤헤~
알려주세여~~ 아 그리고 소켓은.. STREAM 으로 연결했는데여...read()와
write() 문이.. send()와recv() 와 다른점이 있나여??그러니깐 더 좋은점
이라던지.. 저는 파일을 CFile 객체를 생성해서.. 버퍼로 읽고..그걸
while 문으로 돌려서 send 로 보냈는데... 무슨 잘못된 점이라도..

익명 사용자의 이미지

동기적이라 하면은 말그대로 순서적으로...
앞의 데이터를 받으면 다음 데이터를 받고 하는식으로 하는 것을 말합니
다.
UDP는 이와 상관없이 그냥 데이터를 보내기만 합니다.
이런 경우 데이터가 유실 되었는지 여부도 알수가 없고...
순서도 알수가 없습니다.
그러나 이것도 해결 방법이 없잖아 있기는 하지만은...
데이터를 재구성을 하고...
데이터 유실 여부도 확인을 해야 하기 때문에 구현이 아주 까다롭습니다
(이에 관한 예는 RTP가 좋은 예가 될듯 하네요).
그러나 tcp/ip로 보내게 되면은 이런 과정은 신경을 쓸 필요가 없습니다.
그로인해 약간의 속도에서 떨어지기는 하지만은...-_-a
그리고 send()함수를 사용을 해도 상관은 없습니다.
그러나 전 보통 send(), rcv() 보단 write(), read()를 즐겨 사용을 하기
에 권해드리는 것입니다.
send()와 recv()에 플레스 인수가 하나 더 있는거만 빼면은 별 차이가 없
는거 같네요...

그리고 파일을 전송 할때도 while()문을 이용하지만...
수신 할 경우에도 while()을 돌려 파일의 끝이 확인이 될때까지 받아오는
방법을 사용하는게 일반적인 방법입니다.

이라던지.. 저는 파일을 CFile 객체를 생성해서.. 버퍼로 읽고..그걸
while 문으로 돌려서 send 로 보냈는데... 무슨 잘못된 점이라도..YTS

위 부분에 문제가 있다면...
소스를 보고 확인을 해봐야 알 수가 있을 듯 하네요...

- 信

익명 사용자의 이미지

답변해주셔서 감사합니다.
제가 파일을 send 로 보내는도중에 잘못된점이 있더라고여..
그게... send보낼때 제가 비동기모드를 사용해서.. send 가 다 보내지도
않고 리턴을 하더라고여..(알고봤더니...ㅡ.ㅡ;) 그래서 send 로 보낼때
는 비동기 모드를 해제하고. 다시 블로킹 모드로 돌린후에 보냈습니다.
그랬더니 잘가더군여.. 받는쪽에서는 비동기 메시지 전달로 받구여..
프로그램은 잘돌아가여.. 친구랑 테스트도 해봤구...암튼 답변해주셔서 감
사했습니다. 도움이 많이 되었어여..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.