소켓통신에서요..

teatime의 이미지

소켓을 이용해서 파일을 주고 받았으면 하거든요.

우선. 서버쪽에서 특정한 파일을 하나 열고.

그 파일내용을 클라이언트에게 보내려구 하는데..

잘 안되네요.. 좀 알려주세요..

불량청년의 이미지

좋은 정보를 얻을 수 있습니다.

여기 게시판에서요.

일단 특정 파일을 서버에서 클라이언트가 접속하면 보내는

방식은 쉽습니다.

클라이언트가 접속하면 서버는 해당 파일의 싸이즈를 구해

클라이언트에게 보내주고 클라이언트는 그 싸이즈만큼 루프를

돌면서 서버가 보내주는 정보를 파일에 저장하면 됩니다.

파일 싸이즈를 클라이언트에게 알려주는 이유는 서버에서

100k를 보냈다고 클라이언트에도 100k가 정확히 도착한다는

보장을 할 수 없기 때문입니다.

아~ 퇴근시간이 되니 좀 정리가 안되는군요.

검색하시면 좋은 글들이 많이 나올껍니다. 수고하세요~

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

teatime의 이미지

답변 고맙습니다..

저도 퇴근시간이라 정신없네요..

제 검색 실력이 안되는것인지 찾기 힘들군요..^^

불량청년의 이미지

예전에 본거 같은데 말하고 나서 한 번 검색하니 잘 안나오는거

같네요. ㅡ,.ㅡ;

일단 시나리오를 생각해 보면

1. 서버를 돌린다.
==> 서버 소켓 생성 절차는 아시리라 생각합니다.

2. 클라이언트가 접속한다.
==> 역시 이것도...

3. 서버는 클라이언트에게 전달할 파일 싸이즈를 구하고 전달한다.

        struct stat  file_stat;
        stat("/home/test/data.dat", &file_stat);
        file_stat.st_size

여기서 st_size가 해당 파일의 싸이즈 입니다.

4. 서버는 파일을 읽어 전송한다.
== 보통 파일 읽는 방법은 아시리라 생각합니다.

5. 이때 클라이언트는 데이터를 수신받은 싸이크기 만큼 받는다.
while(1) 문으로 수신받은 싸이즈만큼 계속해서
read()를 하면 될껍니다.

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

펑키의 이미지

안녕하세요.

만약 원하시는 부분이 파일 전송만(!!) 이시라면 웹서버나 FTP 서버를 이용하시길 권해드립니다. 프로그램 제작에 주요한 우선권이 있으시고 이런 저런 기능을 원하시는것이라면 서버를 새롭게 제작하시는것이 좋지만 단지 파일만 전송하실거라면 기존의 FTP나 HTTP서버를 이용하시는것은 어떠실런지 하고 의견 드립니다.

우선 서버제작에 대한 부담이 줄어 들고 안정적인 운용에 주안점을 두실수 있을겁니다. 클라이언트가 유닉스쪽이 아니라 윈도우 계열에서 제작을 하신다면 그러한 프로토콜을 조작할수 있는 다양한 클레스들이 제공되기 때문입니다. 물론 서버쪽에 보안도 가능하구요.

만약 새롭게 제작하신다면 이곳의 게시판을 '통신' 혹은 '소켓' 관련된 검색어로 주욱 찾아 보신다면 다양한 정보를 얻으실수 있을겁니다. 어떠한 방식으로 제작을 하시더라도 윗분이 말씀 하신것 처럼 전문헤더+전문바디 이런식으로 전문을 보내시면 큰 문제는 없을겁니다. 말꼬리 잡는것 같지만(죄송, 그런뜻은 아닙니다) TCP에서 100K를 전송하면 100K가 전송되는 보장은 있지만 언제 혹은 지금 즉시 전송 된다는 보장은 없기 때문에 BODY의 크기(HEADER는 정해진 크기)를 보내주신다면 원활한 전송이 가능할겁니다.

즐거운 하루되세요.

댓글 달기

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