Java Socket 网络编程常见异常
1.java.net.SocketTimeoutException . 这 个异 常比较常见,socket 超时。一般有 2 个地方会抛出这个,一个是 connect 的 时 候 , 这 个 超 时 参 数 由connect(SocketAddress endpoint,int timeout) 中的后者来决定,还有就是 setSoTimeout(int timeout),这个是设定读取的超时时间。它们设置成 0 均表示无限大。
2.java.net.BindException:Address already in use: JVM_Bind 。 该 异 常 发 生 在 服 务 器 端 进 行 new ServerSocket(port) 或者 socket.bind(SocketAddress bindpoint)操作时。
原因:与 port 一样的一个端口已经被启动,并进行监听。此时用 netstat –an 命令,可以看到一个 Listending 状态的端口。只需要找一个没有被占用的端口就能解决这个问题。
3.java.net.ConnectException: Connection refused: connect。该异常发生在客户端进行 new Socket(ip, port)或者 socket.connect(address,timeout)操作时,
原 因:指定 ip 地址的机器不能找到(也就是说从当前机器不存在到指定 ip 路由),或者是该 ip 存在,但找不到指定的端口进行监听。应该首先检查客户端的 ip 和 port是否写错了,假如正确则从客户端 ping 一下服务器看是否能 ping 通,假如能 ping 通(服务服务器端把 ping 禁掉则需要另外的办法),则 看在服务器端的监听指定端口的程序是否启动。
4.java.net.SocketException: Socket is closed ,该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了 Socket 的 close 方法)再对网络连接进行读写操作。
5.java.net.SocketException: Connection reset 或者Connect reset by peer:Socket write error。 该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是假如一端的 Socket 被关闭(或主动关闭或者因为异常退出而引起的关闭), 另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另 一 端 假 如 在 从 连 接 中 读 数 据 则 抛 出 该 异 常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
对于服务器,一般的原因可以认为:
a) 服务器的并发连接数超过了其承载量,服务器会将其中一些连接主动 Down 掉.
b) 在数据传输的过程中,浏览器或者接收客户端关闭了,而服务端还在向客户端发送数据。
6.java.net.SocketException: Broken pipe。 该异常在客户端和服务器均有可能发生。在抛出
SocketExcepton:Connect reset by peer:Socket write error 后,假如再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方 关闭连接后自己也要关闭该连接。
对于 4 和 5 这两种情况的异常,需要特别注意连接的维护。在短连接情况下还好,如果是长连接情况,对于连接状态的维护不当,则非常容易出现异常。基本上对长连接需要做的就是:
a) 检测对方的主动断连(对方调用了 Socket 的 close 方法)。因为对方主动断连,另一方如果在进行读操作,则此时的返回值是-1。所以一旦检测到对方断连,则主动关闭己方的连接(调用 Socket 的 close 方法)。
b) 检测对方的宕机、异常退出及网络不通,一般做法都是心跳检测。双方周期性的发送数据给对方,同时也从对方接收“心跳数据”,如果连续几个周期都没有收到对方心跳,则可以判断对方或者宕机或者异常退出或者网络不通,此时也需要主动关闭己方连接;如果是客户端可在延迟一定时间后重新发起连接。虽然 Socket 有一个keep alive 选项来维护连接,如果用该选项,一般需要两个小时才能发现对方的宕机、异常退出及网络不通。
7.java.net.SocketException: Too many open files
原因: 操作系统的中打开文件的最大句柄数受限所致,常常发生在很多个并发用户访问服务器的时候。因为为了执行每个用户的应用服务器都要加载很多文件(new 一个socket 就需要一个文件句柄),这就会导致打开文件的句柄的缺乏。
解决方式:
a) 尽量把类打成 jar 包,因为一个 jar 包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄。
b) java 的 GC 不能关闭网络连接打开的文件句柄,如果没有执行 close()则文件句柄将一直存在,而不能被关闭。
也可以考虑设置 socket 的最大打开 数来控制这个问题。对操作系统做相关的设置,增加最大文件句柄数量。
ulimit -a 可以查看系统目前资源限制,ulimit -n 10240 则可以修改,这个修改只对当前窗口有效。
相关推荐
Java+Socket+网络编程常见异常
- 在Socket编程中,常见的异常包括`IOException`(I/O操作失败)、`UnknownHostException`(未知主机)和`ConnectException`(连接失败)。确保捕获这些异常并适当地处理。 6. **高级特性**: - `Socket`和`...
文件传输是 Java Socket 编程中的一种常见应用场景,通过建立客户端和服务器端之间的连接,实现文件的上传和下载。 从给定的文件中,我们可以看到,文件传输服务器端使用了 Java Socket 编程技术,通过 ...
Java Socket编程是网络编程的基础,它提供了在Java中进行低级网络通信的接口。Socket是TCP/IP协议族的一部分,用于实现客户端与服务器之间的双向通信。在这个"java TCP_IP Socket 编程"源码中,我们可以深入理解...
在Socket编程中,常见的异常包括`IOException`,如连接失败、数据传输错误等。 - 关闭Socket和相关的流是至关重要的,以防止资源泄露。`Socket`和`ServerSocket`都有`close()`方法,确保在完成通信后调用。 4. **...
Socket编程中,常见的异常有IOException,包括SocketException等。需要对可能出现的异常进行捕获和处理,以确保程序的健壮性。 六、源码分析 博客中可能提供了具体的示例代码,例如创建一个简单的TCP聊天应用,包括...
包括Socket编程、TCP/IP协议、Java Socket类、ServerSocket类、Java网络编程模型、网络编程常见问题、多线程编程、并发编程、Socket选项、网络安全、数据传输、网络协议、Socket超时、网络异常处理等。
- Socket编程中常见的异常有`IOException`、`ConnectException`、`SocketTimeoutException`等,必须妥善处理这些异常,确保程序的健壮性。 5. **关闭资源**: - 通信完成后,记得关闭Socket以及相关的输入/输出流...
6. **异常处理**:在Socket编程中,需要处理常见的网络异常,如`IOException`,以及特定的Socket异常,如`SocketException`。 7. **关闭资源**:通信完成后,必须关闭Socket和ServerSocket,以释放网络资源。通常...
Java Socket编程是网络编程的基础,它提供了进程间通信(IPC)的能力,特别是在互联网环境中,让两个运行在不同设备上的应用程序可以相互通信。本实例压缩包包含了一系列的Java Socket编程示例,旨在帮助开发者深入...
- 在Socket编程中,网络连接的中断、数据传输的错误等情况很常见,需要编写良好的异常处理代码,确保程序的健壮性。 8. **文件传输**: - 文件传输时,可能需要分块传输,以适应不同的网络环境,避免大文件传输...
- Socket编程中常见的异常包括`IOException`(输入/输出错误)、`ConnectException`(连接失败)、`SocketTimeoutException`(连接超时)等。编写代码时应妥善处理这些异常。 以下是一个简单的服务器端示例: ```...
5. **异常处理**:Socket编程中,常见的异常包括`IOException`、`ConnectException`和`SocketException`等,需要适当地捕获和处理。 6. **关闭连接**:通信结束后,应关闭输入流、输出流以及Socket,避免资源浪费。...
在Java Socket编程中,`IOException`是最常见的异常类型,需要妥善处理。 7. **关闭资源**: - 通信完成后,记得关闭所有的套接字、输入流和输出流。这通常使用`finally`块来确保即使在发生异常时也能正确关闭。 ...
- Socket编程中常见的异常包括`IOException`,如网络中断、连接超时等。需要确保捕获并处理这些异常,保持程序的健壮性。 5. **关闭资源**: - 当通信结束时,记得关闭所有打开的资源,包括`Socket`、`...
5. **异常处理**:在Socket编程中,网络异常是常见问题,书中会展示如何有效地捕获和处理这些异常。 6. **数据序列化与反序列化**:在Socket传输中,对象通常需要转化为字节流进行传输,因此数据序列化和反序列化的...
在Socket编程中,常见的异常包括`IOException`(如网络中断、服务器未响应等)和`ConnectException`(连接失败)。务必捕获这些异常并进行适当处理。 7. **多线程处理** 在高并发场景下,服务器端通常需要为每个...
总的来说,Java Socket编程是构建网络应用的基础,它涵盖了网络通信的核心原理,通过学习和实践,你可以创建自己的聊天应用或其他基于网络的项目。记住,实践是最好的老师,动手编写代码并运行测试是掌握这项技能的...
Java Socket编程涉及到TCP/IP协议栈的底层操作,因此需要理解TCP连接的三次握手和四次挥手过程,以及Socket编程中的异常处理、线程管理等高级话题。此外,为了提高效率和安全性,实际应用中通常会使用BufferedReader...
在Socket编程中,常见的异常包括IOException、UnknownHostException、SocketException等,必须妥善处理这些异常,确保程序的健壮性。 六、关闭Socket 在通信结束后,记得关闭Socket和相关的输入/输出流,避免资源...