文档章节

socket客户端异常关闭,服务端解决方案

strict_nerd
 strict_nerd
发布于 2018/06/30 16:04
字数 274
阅读 218
收藏 0

异常如下:

java.net.SocketException: Socket is closed 	
at java.net.Socket.getOutputStream(Socket.java:916) ~[na

引起后果

服务端不知道客户端socket已经关闭,如果继续发送数据,可能导致发送如上关闭异常。如果有多个客户端长连接给服务端建立,异常处理不恰当的话,还可能引起下次发送异常关闭情况。

解决方案

socket客户端断开之后会回调服务端socket,这时服务端发现输入流的长度为 -1 这时首先需要关闭客户端socket,然后把该socket从发送列表中删除。

Java代码实例

  1. 检测是否断开
int len = in.read(head, 0, Const.PACK_HEAD_LEN);
                // socket 已经断开,跳出循环
                if (len == -1) {
                    break;
                }
  1. 关闭客户端socket并且移除发送客户端socket
 try {
                socket.close();
                sockets.remove(socket);
            } catch (IOException e) {
                this.logger.error(e);
            } finally {
                socket = null;
            }

© 著作权归作者所有

strict_nerd
粉丝 12
博文 54
码字总数 27566
作品 0
郑州
程序员
私信 提问
加载中

评论(0)

java.net.SocketException四大异常解决方案

java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题。希望大家有所帮助。那么我们就来看看有关java.net.SocketException的相关知识。 第1个异常是...

长平狐
2012/08/28
385
0
Connection reset by peer 的常见原因:

Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭; 如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病...

不忘初心77
2018/06/26
0
0
异常测试之Socket网络异常

本文由作者张雨授权网易云社区发布。 前言 不知道大家在测试的过程中有没有发现关于异常测试这样一个特点: 无论是分散在功能测试中的异常用例还是规模相对较大的专项异常测试中,异常测试的...

网易云
2018/12/14
0
0
TCP异常关闭研究分析

版权声明:本文由谢代斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qcloud.com/community 研究测试TCP断开和异常的各...

偶素浅小浅
2016/11/02
117
0
Java Socket 编程原理及教程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当...

bluecoffee
2017/10/18
21
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 提前接受社会的毒打教育

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @爱吃蛋挞的kk:分享Buddy Guy的单曲《I Need You Tonight》 《I Need You Tonight》- Buddy Guy 手机党少年们想听歌,请使劲儿戳(这里) 凌...

小小编辑
4分钟前
13
0
成都哪里可以开租赁费发票-成都新闻网

成都哪里可以开租赁费发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了...

提供格
6分钟前
17
0
成都哪里可以开钢材发票-成都新闻网

成都哪里可以开钢材发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该...

多徐重
8分钟前
17
0
成都哪里可以开医疗器械发票-成都新闻网

成都哪里可以开医疗器械发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用...

识过人石
10分钟前
43
0
函数

if ( ) {return 10;}else {return 20;}//“单一出口”理念,虽然上面这么写可以,但是最好只有一个return//把需要返回的值赋值给一个变量,最后统一返回,这样将来修改方便 void ...

heronos
21分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部