2014-09-26 9 views
2

스트리밍 HTTP 연결에서 데이터를 받기 위해 Java 코드를 작성하려고합니다. 스프링 webSocket 서버에 대해 Sockjs XHR 스트리밍을 실행하면서 발생하는 문제를 디버그하고 싶습니다. 소켓에서 누락 된 데이터

나는 연결하는 정말 간단한 코드를 사용

URI uri = // The server 
    Socket socket = new Socket(); 
    socket.connect(new InetSocketAddress(uri.getHost(), uri.getPort())); 
    OutputStream os = socket.getOutputStream(); 
    PrintWriter pw = new PrintWriter(os); 
    int id = new Random().nextInt() % 100000; 
    pw.println("POST /socket/" + id + "/xxx/xhr_streaming HTTP/1.1"); 
    pw.println("Content-Type: application/stomp"); 
    pw.println("Content-Length: 0"); 
    pw.println("Connection: keep-alive"); 
    pw.println(); 
    pw.flush(); 
    InputStream is = socket.getInputStream(); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    byte[] buffer = new byte[8192]; 
    int bytes; 
    do { 
     bytes = is.read(buffer); 
     if (bytes > 0) { 
      System.out.println("read: "+ bytes); 
      System.out.print(new String(buffer, 0, bytes)); 
      System.out.println("----"); 
     } 
    } while (bytes >= 0); 

을하지만 난 그것을 실행할 때 난 단지 HTTP 헤더를 얻는다.

그 자체로 놀라운 것은 아닙니다. 나는 서버가 내용을 제대로 보내지 않았을 것으로 의심된다.

그러나 Wireshark를 사용하여 트래픽을 모니터링하면 POST에 대한 응답으로 세 개의 TCP 세그먼트가 수신됨을 알 수 있습니다. 하나는 1460 바이트 (+54 바이트 TCP/IP 헤더), 1178 바이트 (헤더 +54 바이트) 및 7 바이트 (헤더 +44 바이트) 중 하나입니다.

첫 번째 메시지에는 HTTP 헤더와 878 바이트의 내용이 포함됩니다 (Sockjs XHR 스트리밍은 2048 h의 전제를 보내는 것으로 시작합니다). 다음 페이지에는 나머지 프리앰블이 포함되어 있으며 마지막 페이지에는 '열린 프레임'이 있습니다. 정확하게 서버에서 기대하는대로.

왜 Java 코드가 나머지 데이터를받지 못합니까? 원시 소켓을 사용할 때 HTTP 프로토콜을 완전히 인식하지 못해서 왜 HTTP 헤더 만 받는지 이해할 수 없습니다. 서버는 아마도 헤더를 작성한 후 데이터를 플러시하지만 네트워크 덤프에서 헤더와 데이터의 첫 번째 부분이 첫 번째 TCP 세그먼트에 포함되어 있음을 볼 수 있습니다. 여기

첫 번째받은 TCP 세그먼트의 덤프입니다 :

0000 e8 39 35 45 20 df 00 0c 29 09 62 3b 08 00 45 00 .95E ...).b;..E. 
0010 05 dc 0c 5e 40 00 80 06 5b 27 c0 a8 06 26 c0 a8 ...^@...['...&.. 
0020 06 20 1f 90 df d9 92 50 c3 f6 ac 89 8a c3 50 10 . .....P......P. 
0030 01 00 fc 88 00 00 48 54 54 50 2f 31 2e 31 20 32 ......HTTP/1.1 2 
0040 30 30 20 4f 4b 0d 0a 53 65 72 76 65 72 3a 20 41 00 OK..Server: A 
0050 70 61 63 68 65 2d 43 6f 79 6f 74 65 2f 31 2e 31 pache-Coyote/1.1 
0060 0d 0a 58 2d 55 41 2d 43 6f 6d 70 61 74 69 62 6c ..X-UA-Compatibl 
0070 65 3a 20 49 45 3d 65 64 67 65 2c 63 68 72 6f 6d e: IE=edge,chrom 
0080 65 3d 31 0d 0a 58 2d 43 6f 6e 74 65 6e 74 2d 54 e=1..X-Content-T 
0090 79 70 65 2d 4f 70 74 69 6f 6e 73 3a 20 6e 6f 73 ype-Options: nos 
00a0 6e 69 66 66 0d 0a 58 2d 58 53 53 2d 50 72 6f 74 niff..X-XSS-Prot 
00b0 65 63 74 69 6f 6e 3a 20 31 3b 20 6d 6f 64 65 3d ection: 1; mode= 
00c0 62 6c 6f 63 6b 0d 0a 43 61 63 68 65 2d 43 6f 6e block..Cache-Con 
00d0 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 65 2c 20 trol: no-cache, 
00e0 6e 6f 2d 73 74 6f 72 65 2c 20 6d 61 78 2d 61 67 no-store, max-ag 
00f0 65 3d 30 2c 20 6d 75 73 74 2d 72 65 76 61 6c 69 e=0, must-revali 
0100 64 61 74 65 0d 0a 50 72 61 67 6d 61 3a 20 6e 6f date..Pragma: no 
0110 2d 63 61 63 68 65 0d 0a 45 78 70 69 72 65 73 3a -cache..Expires: 
0120 20 30 0d 0a 58 2d 46 72 61 6d 65 2d 4f 70 74 69 0..X-Frame-Opti 
0130 6f 6e 73 3a 20 44 45 4e 59 0d 0a 58 2d 46 72 61 ons: DENY..X-Fra 
0140 6d 65 2d 4f 70 74 69 6f 6e 73 3a 20 41 4c 4c 4f me-Options: ALLO 
0150 57 2d 46 52 4f 4d 20 2a 0d 0a 58 2d 41 70 70 6c W-FROM *..X-Appl 
0160 69 63 61 74 69 6f 6e 2d 43 6f 6e 74 65 78 74 3a ication-Context: 
0170 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 43 61 application..Ca 
0180 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d che-Control: no- 
0190 73 74 6f 72 65 2c 20 6e 6f 2d 63 61 63 68 65 2c store, no-cache, 
01a0 20 6d 75 73 74 2d 72 65 76 61 6c 69 64 61 74 65 must-revalidate 
01b0 2c 20 6d 61 78 2d 61 67 65 3d 30 0d 0a 41 63 63 , max-age=0..Acc 
01c0 65 73 73 2d 43 6f 6e 74 72 6f 6c 2d 41 6c 6c 6f ess-Control-Allo 
01d0 77 2d 4f 72 69 67 69 6e 3a 20 2a 0d 0a 41 63 63 w-Origin: *..Acc 
01e0 65 73 73 2d 43 6f 6e 74 72 6f 6c 2d 41 6c 6c 6f ess-Control-Allo 
01f0 77 2d 43 72 65 64 65 6e 74 69 61 6c 73 3a 20 74 w-Credentials: t 
0200 72 75 65 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 rue..Content-Typ 
0210 65 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a e: application/j 
0220 61 76 61 73 63 72 69 70 74 3b 63 68 61 72 73 65 avascript;charse 
0230 74 3d 55 54 46 2d 38 0d 0a 54 72 61 6e 73 66 65 t=UTF-8..Transfe 
0240 72 2d 45 6e 63 6f 64 69 6e 67 3a 20 63 68 75 6e r-Encoding: chun 
0250 6b 65 64 0d 0a 44 61 74 65 3a 20 46 72 69 2c 20 ked..Date: Fri, 
0260 32 36 20 53 65 70 20 32 30 31 34 20 30 39 3a 32 26 Sep 2014 09:2 
0270 36 3a 31 37 20 47 4d 54 0d 0a 0d 0a 38 30 31 0d 6:17 GMT....801. 
0280 0a 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 .hhhhhhhhhhhhhhh 
0290 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
02a0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
02b0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
02c0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
02d0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
02e0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
02f0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0300 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0310 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0320 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0330 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0340 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0350 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0360 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0370 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0380 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0390 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
03a0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
03b0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
03c0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
03d0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
03e0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
03f0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0400 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0410 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0420 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0430 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0440 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0450 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0460 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0470 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0480 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0490 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
04a0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
04b0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
04c0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
04d0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
04e0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
04f0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0500 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0510 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0520 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0530 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0540 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0550 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0560 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0570 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0580 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
0590 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
05a0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
05b0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
05c0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
05d0 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 hhhhhhhhhhhhhhhh 
05e0 68 68 68 68 68 68 68 68 68 68     hhhhhhhhhh 

여기에 코드의 출력입니다 :

read: 582 
HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
X-UA-Compatible: IE=edge,chrome=1 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: 0 
X-Frame-Options: DENY 
X-Frame-Options: ALLOW-FROM * 
X-Application-Context: application 
Cache-Control: no-store, no-cache, must-revalidate, max-age=0 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Credentials: true 
Content-Type: application/javascript;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Fri, 26 Sep 2014 09:26:17 GMT 

---- 

어떻게 남아있는 데이터는 어떻게해야합니까?

편집 : 수신 버퍼 크기를 으로 줄이면 읽은 후 출력 스트림에 단일 바이트를 쓰고 누락 된 데이터가있는 것 같습니다. 왜 그런가요?

+0

어떻게 든 수신 버퍼 크기를 줄이면 작동합니다. 왜?! –

+0

스크래치 그. 그러나 OutputStream에 데이터를 쓰는 것과 함께 수신 버퍼 크기를 줄이는 것이 효과적입니다. –

+0

"* 첫 번째 것은 HTTP 헤더와 내용의 878 바이트를 포함합니다. *"그리고 로그에 'read : 582'라고 표시된 다음 헤더가옵니다. 이것은 적합하지 않습니다. 또는 나는 무엇인가 놓치고 있냐? – alk

답변

0

내 바이러스 스캐너의 "온라인 방어막"이 원인 인 것으로 나타났습니다. AVG AntiVirus Business Editions의 온라인 방패를 끄자 마자 누락 된 데이터가 들어 오기 시작했습니다. 스트리밍 데이터가 마음에 들지 않는 것 같습니다.

+0

당신은 당신의 대답을 받아 들일 수 있습니다. – alk

관련 문제