<div style="display:inline-block;"> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">혼자서 끙끙 알면서 했는데 이유를 모르겠습니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">TCP로 클라이언트가 100MB 이상 되는 파일을 서버로 전송하는 프로그램입니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">클라이언트 - (파일) -> 서버</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">처음에는 표준 입출력 함수(파일포인터, fread, fwrite) 부분만 썼는데 file의 일부분만 전송되고 <20MB ~ 60MB사이로 파일 실행마다 달라짐></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">그다음에는 system call을 이용해서 write, read를 썼는데 server쪽에서 파일을 읽지 못했습니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">이번 수업에 PPT 내용을 보니 표준 입출력 함수를 통해 데이터 전송을 하기 위해서는</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">파일 디스크립터를 파일 포인터로 만들어야 된다고 해서 </div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">수업 중 배운 fdopen을 이용했는데 server쪽에서 file을 읽지 못합니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">어떠한 점이 잘못됬는지 알려주시면 감사하겠습니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">main 함수에는 TCP 연결 부분만 있고</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">전송부분은 함수로 따로 만들었습니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;">아래는 code입니다.</div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"> <div style="display:inline-block;"> <div><br></div> <div> <table style="font-size:13px;font-family:NanumGothicCoding, '나눔고딕코딩', '나눔고딕', NanumGothic, '돋움', Dotum;white-space:nowrap;" border="0" cellpadding="0" cellspacing="0"><tbody><tr style="margin:0px;padding:0px;"><td style="color:#888888;margin:0px;padding:0px 3px;text-align:right;border-right-width:3px;border-right-style:solid;border-right-color:#0099cc;"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> <div>7</div> <div>8</div> <div>9</div> <div>10</div> <div>11</div> <div>12</div> <div>13</div> <div>14</div> <div>15</div> <div>16</div> <div>17</div> <div>18</div> <div>19</div> <div>20</div> <div>21</div> <div>22</div> <div>23</div> <div>24</div> <div>25</div> <div>26</div> <div>27</div> <div>28</div> <div>29</div> <div>30</div></td> <td style="margin:0px;padding:0px 3px;color:#010101;" nowrap> <div style="background-color:#f7f7f7;"><font color="#999999">//server.c 의 파일 송신 부분</font></div> <div>void trans_file (int sd) <font color="#999999">//sd는 client socket</font></div> <div style="background-color:#f7f7f7;">{</div> <div> char buffer[BUFSIZE]; <font color="#999999">//BUFSIZE는 1024로 define 되어 있음</font></div> <div style="background-color:#f7f7f7;"> int fd; <font color="#999999">//파일 디스크립터</font></div> <div> FILE *writefp; <font color="#999999">//파일 포인터 (파일 디스크립터를 가리키는 포인터)</font></div> <div style="background-color:#f7f7f7;"> FILE *readfp; <font color="#999999">//파일 포인터 (소켓을 가리키는 포인터)</font></div> <div> </div> <div style="background-color:#f7f7f7;"> fd = open(<font color="#993333">"test2.mp4"</font>, O_WRONLY|O_CREAT|O_TRUNC); <font color="#999999">//파일 오픈</font></div> <div> </div> <div style="background-color:#f7f7f7;"> writefp = fdopen(fd, <font color="#993333">"w"</font>); <font color="#999999">//파일 포인터와 파일 디스크립터 연결</font></div> <div> readfp = fdopen(sd, <font color="#993333">"r"</font>); <font color="#999999">//파일 포인터와 소켓 연결</font></div> <div style="background-color:#f7f7f7;"> int i = 0;</div> <div> while (1)</div> <div style="background-color:#f7f7f7;"> {</div> <div> i++;</div> <div style="background-color:#f7f7f7;"> printf(<font color="#993333">"%d \n"</font>, i); <font color="#999999">//송신 되는지 확인</font></div> <div> fgets(buffer,BUFSIZE,readfp); <font color="#999999">//소켓을 통해 전송된 내용을 buffer에 저장</font></div> <div style="background-color:#f7f7f7;"> if (strstr (buffer, <font color="#993333">"end"</font>) == 0) <font color="#999999">//송신이 끝나면 client가 end 전송</font></div> <div> {</div> <div style="background-color:#f7f7f7;"> printf(<font color="#993333">"Transfer completion\n"</font>);</div> <div> break;</div> <div style="background-color:#f7f7f7;"> }</div> <div> fputs(buffer,writefp); <font color="#999999">//buffer에 저장된 내용을 test2.mp4로 저장</font></div> <div style="background-color:#f7f7f7;"> }</div> <div> </div> <div style="background-color:#f7f7f7;"> fclose (writefp);</div> <div> fclose (readfp);</div> <div style="background-color:#f7f7f7;"> return;</div> <div>}</div></td></tr></tbody></table></div></div></div> <div style="font-family:'나눔고딕', NanumGothic, '돋움', Dotum;"><br></div> <div> <div style="display:inline-block;"> <div> <table style="font-size:13px;font-family:NanumGothicCoding, '나눔고딕코딩', '나눔고딕', NanumGothic, '돋움', Dotum;white-space:nowrap;" border="0" cellpadding="0" cellspacing="0"><tbody><tr style="margin:0px;padding:0px;"><td style="color:#888888;margin:0px;padding:0px 3px;text-align:right;border-right-width:3px;border-right-style:solid;border-right-color:#0099cc;"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> <div>7</div> <div>8</div> <div>9</div> <div>10</div> <div>11</div> <div>12</div> <div>13</div> <div>14</div> <div>15</div> <div>16</div> <div>17</div> <div>18</div> <div>19</div> <div>20</div> <div>21</div> <div>22</div> <div>23</div> <div>24</div> <div>25</div> <div>26</div> <div>27</div> <div>28</div> <div>29</div> <div>30</div> <div>31</div></td> <td style="margin:0px;padding:0px 3px;color:#010101;" nowrap> <div style="background-color:#f7f7f7;"><font color="#999999">//client.c 파일의 파일 전송 부분</font></div> <div>void trans_file(int sd)<font color="#999999">//sd는 소켓</font></div> <div style="background-color:#f7f7f7;">{</div> <div> int fd; <font color="#999999">//파일 디스크립터</font></div> <div style="background-color:#f7f7f7;"> FILE *readfp; <font color="#999999">//파일 포인터 (test.mp4를 읽음)</font></div> <div> FILE *writefp; <font color="#999999">//파일 포인터 (server로 전송)</font></div> <div style="background-color:#f7f7f7;"> fd = open(<font color="#993333">"test.mp4"</font>, O_RDONLY); <font color="#999999">//파일 오픈</font></div> <div> if (fd == -1) <font color="#999999">// 에러 처리</font></div> <div style="background-color:#f7f7f7;"> {</div> <div> printf(<font color="#993333">"file open error \n"</font>);</div> <div style="background-color:#f7f7f7;"> exit(1);</div> <div> }</div> <div style="background-color:#f7f7f7;"> char buffer[BUFSIZE]; <font color="#999999">//BUFSIZE는 1024로 define</font></div> <div> </div> <div style="background-color:#f7f7f7;"> readfp = fdopen(fd, <font color="#993333">"r"</font>); <font color="#999999">//파일 포인터와 파일 디스크립터 연결</font></div> <div> writefp = fdopen(sd, <font color="#993333">"w"</font>); <font color="#999999">//파일 포인터와 소켓 연결</font></div> <div style="background-color:#f7f7f7;"> </div> <div> int i = 0; <font color="#999999">//전송 되나 확인</font></div> <div style="background-color:#f7f7f7;"> while(!feof(readfp))</div> <div> {</div> <div style="background-color:#f7f7f7;"> i ++;</div> <div> printf(<font color="#993333">"%d\n"</font>, i);</div> <div style="background-color:#f7f7f7;"> fgets(buffer,BUFSIZE,readfp); <font color="#999999">//test.mp4 파일을 BUFSIZE만큼 읽음</font></div> <div> fputs(buffer,writefp); <font color="#999999">//buffer 내용을 소켓에 전송</font></div> <div style="background-color:#f7f7f7;"> fflush(writefp);</div> <div> }</div> <div style="background-color:#f7f7f7;"> </div> <div> fputs (<font color="#993333">"end"</font>, writefp); <font color="#999999">//파일 전송이 끝나면 end를 보내 server.c의 반복문 종료</font></div> <div style="background-color:#f7f7f7;"> </div> <div> return;</div> <div style="background-color:#f7f7f7;">}</div></td></tr></tbody></table></div></div></div> <div><br></div> <div>client측 실행 화면</div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201411/1417083315g85oOwpgjCFoRLYXXQuLfqIXGgI.png" width="800" height="450" alt="1.png" class="chimg_photo" style="border:none;"></div> <div style="text-align:left;"><br></div> <div style="text-align:left;">server측 실행 화면</div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201411/1417083315WCG9PZ8lAnfKhcRcG.png" width="239" height="51" alt="2.png" style="border:none;"></div> <div style="text-align:left;"><br></div> <div style="text-align:left;">ls -l 명령어 실행 시</div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201411/1417083315ai1WbXmJBasevIrV.png" width="620" height="165" alt="3.png" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div><br></div></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.