SSISO Community

시소당

socket에서 데이터가 덜 읽히는 문제 해결법

C건  Java이건  Socket을  이용해서  read  하는  경우에는  원하는  사이즈만큼  못  읽는  경우가  종종  있습니다.  대략  tcp/ip의  커널  파라미터의  영향인데요...

이  경우는  읽는  방식을  고치면  다  읽을수가  있습니다.  

*JAVA
                //  이렇게  읽는  경우는  50000을  다  못  읽어오는  경우가  발생을  합니다..

                byte  xmlBytes[]  =  new  byte[50000];
                real_read  =  _input.read(xmlBytes,  0,  xmlBytes.length);

                //  원하는  바이트가  읽을때까지  처리하는  로직/

                byte  xmlBytes[]  =  new  byte[50000];
                int  real_read  =  1;
                int  read_offset  =  0;
                while(real_read>0)  {
                                real_read  =  _input.read(xmlBytes,  read_offset,  xmlBytes.length-read_offset);
                                read_offset+=  real_read;
                }  

*  C

                char  rcv_msg[MAX_MSG];

                int          rcv_size  =  1;

  

                while  (rcv_size  >  0)  {
                                if  ((rcv_size=recv(newSd,  rcv_msg,  MAX_MSG,  0))  <  0)  {
                                                perror("[TCP  ERROR]  cannot  receive  data  ");
                                                return  ERROR;
                                }
                                total_read+=rcv_size;
                }  

방식은  거의  동일하죠...

java,  C의  read/recv  함수의  리턴값은  실제  읽은  사이즈를  리턴합니다.
이를  실제  읽고자  하는  전체  사이즈에서  빼주고,  다시  읽는  것입니다.

[출처]  socket에서  데이터가  덜  읽히는  문제  해결법.|작성자  하자두
http://blog.naver.com/hazard11?Redirect=Log&logNo=80023556714

629 view

4.0 stars