guyz!소켓과 Netty를 사용하여 "broken pipe"예외가 있습니다. 뭐가 문제 야?
서버에 보낼 protobuf 개체가 있습니다. 서버에서 Netty를 사용합니다.
클라이언트에 Netty의 ProtobufDecoder
을 사용할 때 모두 멋지게됩니다.
하지만 바닐라 Java Socket
을 통해 protobuf 객체를 보내려고하면 예외가 발생합니다. 하지만 Socket 객체는 연결 상태를 유지하고 다른 객체를 보내고 예외를 다시 얻을 수 있습니다. = (
은 그물코 기반 클라이언트의 파이프 라인 설정이다.
Exception in thread "main" java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:141)
at SocketClientMain.main(SocketClientMain.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
:
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(134217728, 0, 4, 0, 4));
pipeline.addLast("protobufDecoder", new ProtobufDecoder(mSocketListener.getInMessage()));
내가 어디 maxFrameLength
및 기타 PARAMS을 지정, 모르는 여기
무엇이 잘못 되었나요? 손이 부러 질 수 있습니까? 또는 서버 소유자에게 몇 가지 정보를 문의해야합니까?
오류 로그를 제공하는 것이 좋을 것입니다. –
@ Nordenheim, 죄송합니다. – KartoshkaMan