2014-04-25 5 views
0

HTTPListener 클래스를 사용하여 기본 웹 서버를 구현하고 있습니다. 내 응답은 "multipart/x-mixed-replace"의 Content-Type을 사용하여 JPEG 이미지 스트림을 반환합니다. 응답을 올바르게 구성 할 수 있지만 웹 클라이언트가 응답이 IP 패킷 경계를 넘어 서서 응답을 해석하지 못하기 때문에 제대로 응답을 해석하지 못합니다.HTTPListener 응답 - 패킷 경계를 정의하는 방법

파이썬으로 구현 된 별도의 서버를 사용하여 좋은 작업 사례를 생성 할 수 있습니다. 클라이언트의 HTTP GET 요청에 대한 응답은 다음과 같습니다

packet 1: 
HTTP/1.1 200 OK 

packet 2: 
Server: (myServer) 
Date: (the date) 
Connection: close 
(other header info) 
Content-Type: multipart/x-mixed-replace; boundary=myboundary 

packet 3: 
--myboundary 
Content-Length: 1042 
Content-Type: image/jpeg 

(jpeg data) 
실패한 경우

, http-listener에를 사용하여, 모든 것이

packet 1: 
HTTP/1.1 200 OK 
Server: (myServer) 
Date: (the date) 
Connection: close 
(other header info) 
Content-Type: multipart/x-mixed-replace; boundary=myboundary 

--myboundary 
Content-Length: 1042 
Content-Type: image/jpeg 

(jpeg data) 

그래서 내 질문은 하나의 패킷으로 전송됩니다, 내가 어떻게 할 HTTPListenerResponse의 OutputStream을 조작하여 패킷 경계를 강제 설정 하시겠습니까? 일부 데이터를 지정하고 수동으로 OutputStream에 패킷을 푸시하도록 지시 한 다음 더 많은 데이터를 지정하고 다른 패킷을 푸시 할 수 있기를 원합니다. HTTPListener가이 수준의 컨트롤을 제공합니까, 아니면 대신 TCPListener를 사용해야합니까? 솔루션을 찾을 수 없었습니다. 도와주세요!

답변

0

IP 패킷 경계로 인해 클라이언트가 작동하지 않으면 심각한 문제가 발생합니다. 클라이언트를 고치고 문제가없는 곳에서 목발을 추가하지 마십시오. HTTP는 TCP를 통해 정의되며 TCP는 바이트 스트림 프로토콜입니다. 기간. 올바르게 작성된 TCP 프로그램 인은 HTTP 클라이언트가 아니지만 패킷 경계가 어디에 있든 상관하지 않습니다. 당신의 클라이언트가 이런 식으로 오판을 쳤다면 그것은 다른 방식으로 오동작을 할 것입니다. 고쳐.

+0

답변 해 주셔서 감사합니다. 내 클라이언트로 VLC를 사용하고 있습니다. 패킷 경계에 오류가 발생한 이유는 파이썬 스크립트를 사용하는 좋은 경우에는 동일한 데이터가 VLC에 반환되어 작동하기 때문입니다. 실패한 경우의 유일한 차이점은 패킷 경계입니다. – jimmy31777