【发布时间】:2016-05-08 01:35:27
【问题描述】:
我有一些使用 tcp/ip 发送消息的代码。
客户端顺序是:连接、写入、刷新、关闭输出、关闭输入、关闭套接字。
服务器顺序为accept、readline、shutdown input、shutdown output、close socket。
这在使用与 android 相同的 wifi 网络的 Windows 上运行良好。在 2013 nexus 7 android 6.0.1 上,socket.shutdownInput() 有时会抛出 ENOTCONN(请参见下文)。该程序仍然有效,但我想了解正在发生的事情并尽可能消除异常。
谢谢
编辑:关闭输出流(而不是关闭输出)效果更好。
01-29 23:24:29.394 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: java.net.SocketException: shutdown failed: ENOTCONN (Transport endpoint is not connected)
01-29 23:24:29.394 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.net.PlainSocketImpl.shutdownInput(PlainSocketImpl.java:361)
01-29 23:24:29.394 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.net.Socket.shutdownInput(Socket.java:635)
01-29 23:24:29.394 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at com.tayek.tablet.io.Client.send(Client.java:49)
01-29 23:24:29.394 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at com.tayek.tablet.Tablet.send(Tablet.java:66)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at com.tayek.tablet.Tablet.access$200(Tablet.java:11)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at com.tayek.tablet.Tablet$SendCallable.call(Tablet.java:82)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at com.tayek.tablet.Tablet$SendCallable.call(Tablet.java:72)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-29 23:24:29.395 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.lang.Thread.run(Thread.java:818)
01-29 23:24:29.397 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: Caused by: android.system.ErrnoException: shutdown failed: ENOTCONN (Transport endpoint is not connected)
01-29 23:24:29.397 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at libcore.io.Posix.shutdown(Native Method)
01-29 23:24:29.397 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at libcore.io.ForwardingOs.shutdown(ForwardingOs.java:159)
01-29 23:24:29.397 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: at java.net.PlainSocketImpl.shutdownInput(PlainSocketImpl.java:359)
01-29 23:24:29.397 7164-9300/com.tayek.tablet.gui.android.cb7 W/System.err: ... 10 more
【问题讨论】: