java socket异常_Ponder Socket in Java 对Java中使用Socket时异常情况的思考

a4c26d1e5885305701be709a3d33442f.png

Ponder Socket in Java 对Java中使用Socket时异常情况的思考

(2006-08-22 22:05:10)

分类:

技术

在Java中建立网络非常简单,但也要涉及到Socket,Stream,Thread。对于通常使用来说,通用的例程就足够了,也非常简单,但如果涉及到设计及实现一个协议就需要考虑到各种异常情况了,而一旦涉及到异常情况就会带来很多麻烦。一个健壮的模块反向需求的考虑和实现是需要比正常需求难上好几倍。下面列举一下Socket中需要考虑的一些异常情况,希望能对大家有帮助。

1、创建一个侦听端口时如果此端口不可用会导致java.net.BindException:

Address already in use: JVM_Bind异常。

2、与一个不可达的地址连接会导致异常,与一个不可解释的名字连接会导致异常,与一个未启动的端口建立连接会导致java.net.ConnectException:

Connection refused: connect异常。

3、关闭Socket等同于关闭输入输出流,任意关闭输出流或输入流都会导致整个Socket被关闭。Socket关闭后在输出流中输入流结束符,同时会禁止另一端输出操作。如果未关闭Socket而退出程序则会导致连接重置。Socket关闭后在本端继续操作(包括获取输入输出流,读取,写入)将导致java.net.SocketException:

Socket

closed异常。Socket关闭后在另一端读取会导致java.io.EOFException异常,输出时不会导致异常,但输出后再读取会导致java.net.SocketException:

Software caused connection abort: recv

failed异常。连接重置后另一端读取会导致java.net.SocketException:

Connection reset异常,输出会导致java.net.SocketException:

Connection reset by peer: socket write error异常。

4、使用半连接可以只关闭输出流或只关闭输入流。关闭输出之后,即不能再写,再写会抛java.net.SocketException:

Cannot send after socket shutdown: socket write

error异常,但不影响另一端读;关闭输入流之后,不能再读,再读会抛java.net.SocketException:

Socket input is

shutdown,另一端也不能再写,写的话会抛java.net.SocketException:

Software caused connection abort: socket write error异常。

5、阻塞时调用中断线程不会抛出中断异常。要在阻塞时中断线程要使用Channel。但只能通过SocketChannel来建立连接,对服务器端不可用。并且中断线程后就关闭了Channel。可以考虑使用带超时的socket来间接实现中断。

6、Socket超时setSoTimeout()是针对每一次操作而言,无操作时的累积时间不认为超时,超时发生时会导致java.net.SocketTimeoutException:

Read timed

out异常,但对socket本身无影响,可以继续使用。建立时超时可通过创建一个无连接的Socket并在之后连接另一端时指定超时。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值