gpt4 book ai didi

java - 我使用 Sockets 和 Netty 时遇到 "broken pipe"异常。怎么了?

转载 作者:行者123 更新时间:2023-12-01 09:19:20 25 4
gpt4 key购买 nike

伙计们!

我有一些 protobuf 对象要发送到服务器。服务器使用Netty。

当我使用 Netty 作为客户端以及 Netty 的 ProtobufDecoder 时,一切都很顺利。

但是当我尝试通过普通 Java Socket 发送 protobuf 对象时,出现“管道损坏”异常。但是 Socket 对象保持连接,我可以发送另一个对象并再次收到异常。 =(

这是基于 netty 的客户端管道设置:

ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(134217728, 0, 4, 0, 4));
pipeline.addLast("protobufDecoder", new ProtobufDecoder(mSocketListener.getInMessage()));

我不知道在哪里指定 maxFrameLength 和其他参数。

这是错误日志:

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)

出了什么问题?可能是我手断了?或者我需要向服务器所有者询问一些信息?

最佳答案

java.net.SocketException: Broken pipeline 是由于尝试写入连接而另一端已关闭同一连接而引起的。不是你关闭了连接,否则会抛出另一个异常。您无法恢复连接,必须打开一个新连接。

或者,如果您不断收到异常,则仅意味着应用程序协议(protocol)定义不明确或实现不充分。

关于java - 我使用 Sockets 和 Netty 时遇到 "broken pipe"异常。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40272719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com