Socket常见异常整理

java.net.SocketTimeoutException

java.net.SocketTimeoutException
02-25 20:18:03.856 13374-13390/com.example.studylog W/System.err:     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
02-25 20:18:03.856 13374-13390/com.example.studylog W/System.err:     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
02-25 20:18:03.856 13374-13390/com.example.studylog W/System.err:     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
02-25 20:18:03.856 13374-13390/com.example.studylog W/System.err:     at com.example.studylog.MainActivity$ClientRunnable.run(MainActivity.java:128)
02-25 20:18:03.856 13374-13390/com.example.studylog W/System.err:     at java.lang.Thread.run(Thread.java:856)

出现时机:
先运行ServerSocket服务端,读取文本内容,通过Socket返回给客户端。
客户端创建Socket,但是我socket.setSoTimeout(1000)
我上面时间设置的太短了,所以得到了上面的异常,可以将时间调到5000以上。

java.net.SocketException: Socket input is shutdown

02-25 20:58:42.197 16861-16875/com.example.studylog W/System.err: java.net.SocketException: Socket input is shutdown
02-25 20:58:42.197 16861-16875/com.example.studylog W/System.err:     at java.net.Socket.shutdownInput(Socket.java:606)
02-25 20:58:42.197 16861-16875/com.example.studylog W/System.err:     at com.example.studylog.MainActivity$ClientRunnable.run(MainActivity.java:133)
02-25 20:58:42.197 16861-16875/com.example.studylog W/System.err:     at java.lang.Thread.run(Thread.java:856)

出现时机:
客户端Socket shutdownInput之后又shutdownInput一次,调用了两遍,抛出了上面的错误。
shutdownInput:
将此套接字的输入流置于“流尾”。 发送到套接字的输入流一侧的任何数据都会被确认,然后以静默方式丢弃。
如果您在套接字上调用shutdownInput()之后从套接字输入流读取,则该流将返回EOF。
这里EOF相当于inputStream.read()返回了-1。

java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer)

02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err: java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at libcore.io.IoBridge.sendto(IoBridge.java:475)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at java.io.OutputStream.write(OutputStream.java:82)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at com.example.studylog.MainActivity$ClientRunnable.run(MainActivity.java:134)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at java.lang.Thread.run(Thread.java:856)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err: Caused by: libcore.io.ErrnoException: sendto failed: ECONNRESET (Connection reset by peer)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at libcore.io.Posix.sendtoBytes(Native Method)
02-25 21:23:29.364 18530-18555/com.example.studylog W/System.err:     at libcore.io.Posix.sendto(Posix.java:151)
02-25 21:23:29.374 18530-18555/com.example.studylog W/System.err:     at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
02-25 21:23:29.374 18530-18555/com.example.studylog W/System.err:     at libcore.io.IoBridge.sendto(IoBridge.java:473)
02-25 21:23:29.374 18530-18555/com.example.studylog W/System.err:     ... 6 more

出现时机:
客户端Socket 调用shutdownOutput之后,又对outputStream.write(“1”.getBytes());写入了一些东西,引发了这个异常。
shutdownOutput:
禁用此套接字的输出流。 对于TCP套接字,任何先前写入的数据将在TCP的正常连接终止序列后发送。 如果在套接字上调用shutdownOutput()之后写入套接字输出流,则该流将抛出IOException。

java.io.IOException: read failed: EBADF (Bad file number)

02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err: java.io.IOException: read failed: EBADF (Bad file number)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at libcore.io.IoBridge.read(IoBridge.java:442)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.io.FileInputStream.read(FileInputStream.java:179)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at libcore.io.Streams.readSingleByte(Streams.java:41)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.io.FileInputStream.read(FileInputStream.java:175)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at com.example.studylog.MainActivity$SocketProcessorRunnable.run(MainActivity.java:231)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at java.lang.Thread.run(Thread.java:856)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err: Caused by: libcore.io.ErrnoException: read failed: EBADF (Bad file number)
02-25 21:49:13.052 20314-20334/com.example.studylog W/System.err:     at libcore.io.Posix.readBytes(Native Method)
02-25 21:49:13.062 20314-20334/com.example.studylog W/System.err:     at libcore.io.Posix.read(Posix.java:123)
02-25 21:49:13.062 20314-20334/com.example.studylog W/System.err:     at libcore.io.BlockGuardOs.read(BlockGuardOs.java:149)
02-25 21:49:13.062 20314-20334/com.example.studylog W/System.err:     at libcore.io.IoBridge.read(IoBridge.java:432)
02-25 21:49:13.062 20314-20334/com.example.studylog W/System.err:     ... 9 more

出现时机:
服务端输入流inputStream.close之后,又调用read(),引发了上述错误。

Exception in thread “main” java.net.SocketException: socket closed

Exception in thread "main" java.net.SocketException: socket closed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:170)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.readLine(BufferedReader.java:324)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at com.example.MyClass.main(MyClass.java:24)
    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:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

出现时机:从异常返回来看,是我读InputStream时候,socket发现自己关闭了,所以抛出异常。
原因是我在写入Socket的时候,把OutputStream给close掉了

Returns an output stream for this socket.
If this socket has an associated channel then the resulting output stream delegates all of its operations to the channel. If the channel is in non-blocking mode then the output stream's write operations will throw an java.nio.channels.IllegalBlockingModeException.
Closing the returned OutputStream will close the associated socket.

从注释上看,你关闭OutputStream和InputStream都会导致关联的Socket关闭掉。
所以导致了我上面的异常。

微信公众号:
这里写图片描述
QQ群:365473065

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种高级编程语言,被广泛用于各种领域的软件开发、数据分析、人工智能和科学计算等。它有许多不同的知识点,下面是一些常见的Python知识点整理: 1. 基本语法:包括变量、数据类型、运算符、条件语句、循环语句等。 2. 函数:定义函数、参数传递、返回值、作用域等。 3. 模块与包:导入模块、使用第三方库、创建和使用自定义包等。 4. 文件操作:读取和写入文件、文件路径操作、异常处理等。 5. 数据结构:列表、元组、字典、集合等。 6. 面向对象编程:类、对象、继承、多态等。 7. 异常处理:捕获和处理异常、使用try-except语句等。 8. 正则表达式:匹配模式、替换字符串等。 9. 迭代器与生成器:迭代对象、生成器函数、yield关键字等。 10. 装饰器:函数装饰器、类装饰器等。 11. 并发编程:多线程、多进程、协程等。 12. 文件操作:读写文件、文件路径操作、文件压缩和解压缩等。 13. 数据库操作:连接数据库、执行SQL语句、操作数据库表等。 14. 网络编程:创建TCP/UDP服务器和客户端、Socket编程等。 15. Web开发:使用框架如Django和Flask进行Web应用开发、处理HTTP请求和响应等。 16. 数据分析与可视化:使用NumPy、Pandas和Matplotlib进行数据处理和可视化。 17. 机器学习:使用Scikit-learn库进行机器学习模型的建立和训练。 18. 数据爬取:使用BeautifulSoup和Scrapy进行网页爬取和数据提取。 19. 测试与调试:编写单元测试、调试程序等。 20. 性能优化:代码优化、内存管理、并行计算等。 这只是Python知识点的一小部分,Python是一门非常丰富的语言,还有很多其他的知识点值得深入学习和探索。 相关问题: 1. Python为什么在数据分析和科学计算领域中广泛使用? 2. Python中的模块和包有什么区别?如何导入和使用它们? 3. Python中的异常处理是怎样工作的?为什么它在编程中很重要? 4. Python中的迭代器和生成器有什么区别?如何使用它们来提高代码效率? 5. Python中的装饰器是什么?如何使用它们来增强函数或类的功能? 6. Python的多线程和多进程有什么区别?如何在程序中使用它们? 7. 在Python中如何进行文件的读写操作?如何处理文件路径和异常? 8. 如何使用Python进行数据库操作?如何连接数据库和执行SQL语句? 9. Python中如何进行网络编程?如何创建和使用TCP/UDP服务器和客户端? 10. 如何使用Python进行Web开发?如何使用框架来创建Web应用? 11. Python中如何进行数据爬取和数据处理?如何使用相关的库? 12. Python中如何进行测试和调试?如何编写单元测试和调试程序? 13. 如何使用Python进行性能优化?如何优化代码和内存管理? 14. Python在人工智能领域中有哪些常用的库和框架?如何使用它们来构建机器学习模型?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值