如何处理Java中的插座异常
#发展 #编码 #java #vscode

Java是开发人员在Web开发和应用程序开发中使用的强大而安全的编程语言。作为一种编程语言,它会受到运行时异常的约束。可以处理这些异常以使代码顺利运行。 SocketException是IO异常的子类。顾名思义,表明在创建或访问套接字时发生错误是一个例外。这是一种例外,需要使用称为“ try-catch块”的特殊代码结构以特定方式处理称为“投掷”或“处理”的特定方式。

在本文中,用户将了解Java中的SocketException,其原因以及如何处理。

socketException的常见原因
Java中SocketException的最常见原因是读取或从封闭的插座读取

造成这种情况的另一个原因是在将数据读取到套接字缓冲区中之前的连接终止。下面指出了SocketException的其他几个原因:

  • 防火墙干预
  • 慢网络
  • 长闲置连接
  • 应用程序错误

防火墙干预
网络防火墙可以终止套接字连接。如果您安装了任何防火墙,请尝试将其关闭,然后检查问题是否已解决。

慢网络
慢网络可能是SocketException的原因。要解决指定的问题,请扩展连接持续时间限制。这可以大大减少使用以下代码缓慢连接的socketException:

socket.setSoTimeout(40000); // timeout set to 40,000 ms

长闲置连接
SocketException的另一个原因可能是较长的空闲连接。它可以从其他目的终止以节省资源。解决此问题的解决方案是发送心跳消息以防止闲置状态并确保您的工作始终运作。

应用程序错误
代码中的错误或错误可能是SocketException的另一个原因,例如一个人在关闭或与网络断开连接后试图将消息发送给服务器的情况。

socketException示例
首先,看看什么是socketException以及如何生成。让我们以一个可以生成socketException的简单代码示例。

导入SocketException的必要软件包:

import java.net.SocketException;

在上述片段中,我们从Java的Net软件包中导入了SocketException类。这用于处理网络连接时处理错误。它使我们能够有效地处理错误。

以下是代码段:

public class SocketExceptionExample {
  public static void main(String[] args) {
    try {
      throw new SocketException("Simulated SocketException");
    } catch (SocketException e) {
       e.printStackTrace();
      }
  }
}

上述代码执行的操作是:

  • 创建一个名为socketExceptionExample的类。
  • 为代码创建一个主要方法。
  • 指定一个try-catch块。
  • 在尝试块中,将socketException作为模拟socketException。
  • 在捕获块中,使用socketException对象获取错误消息并将其存储在变量。
  • 然后,使用printstacktrace()方法打印面对的错误。

输出
Image description

如何处理java中的socketException?
要处理Java中的SocketException,请以客户端服务器的示例。为此,首先,创建服务器并将其与本地主机连接。然后,在同一设备上创建一个可以在启动服务器上生成请求的客户端,并且可以处理异常以平稳执行代码。

要处理Java中的SocketException,请浏览列出的步骤。

步骤1.创建socketserver类
创建一个名为SocketServer的类,该类使客户可以连接并发送消息将由Outstream读取。
为此,导入以下软件包:

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

从各个软件包导入的每个类的功能是

  • 导入Java.io.ObjectInputStream导入objectInputStream类,用于从输入流读取对象。
  • 导入java.io.ObjectOutputStream-导入用于在输出流上编写对象的ObjectOutputStream类。
  • 导入java.lang.classnotfoundexception inocternotnotfoundexception'类,当用户找不到所需类别时,将处理情况。
  • 导入java.net.serversocket导入用于检查传入网络连接的serversocket类。
  • 导入java.net.socket导入插座类,用于与我们的服务器建立客户端连接。

代码通过使用前面的软件包来创建和启动“ socketServer”:

public class SocketServer {
  private static ServerSocket server;
  private static int port = 9876;
  public static void main(String args[]) throws IOException,    ClassNotFoundException{
       server = new ServerSocket(port);
       while(true){
      System.out.println("Waiting for the client request");   
      Socket socket = server.accept();
      ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
      String message = (String) ois.readObject();
      System.out.println("Message Received: " + message);
      ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
      oos.writeObject("Hello "+message);
      input.close();
      output.close();
      socket.close();
      if(message.equalsIgnoreCase("exit")) break;
    }
  System.out.println("Shutting down Socket server!!");
    server.close();
  }
}

上述代码执行的功能是:

  • 声明一个名为“ socketserver”的课程。
  • ``server = new serversocket(port)'声明服务器serversocket的私有静态变量。
  • private static int port = 9876声明一个静态变量,并指定端口号。分配9876。
  • 然后,定义一个可以抛出以下异常的主要方法。
  • ``server = new serversocket(port)创建一个serversocket的对象并将其分配给服务器。它负责检查传入网络连接。
  • 在True条件下启动一个段循环。
  • socket socket = server.accept() - 等待客户端连接并授予连接的访问​​。
  • “ ObjectInputStream input = new ObjectInputStream(socket.getInputStream())创建一个名为“输入”的对象,该对象从客户端的输入流读取数据。
  • 字符串消息=(string)input.readobject()读取来自客户端的消息,然后将数据类型更改为字符串,并将其存储在变量。
  • system.out.println(“接收到消息:” +消息)打印收到的消息。
  • ocketOutputStream output = new ObjectOutputStream(socket.getOutputStream())创建用于将数据写入客户端输出流的对象。
  • output.WriteObject(“ Hello” + Messages)给出了对客户端输出流的响应。
  • input.close()关闭输入流。
  • output.close()关闭输出流。
  • socket.close()与客户端关闭插座连接。
  • if(Message.EqualalSignorecase(“ exit”))断路。
  • server.close()关闭服务器套接字。

步骤2.创建一个socketClient类
创建另一个名为socketClient的类,以在创建的服务器上生成请求。将一些消息发送到创建的服务器进行验证。

要导入的所需软件包和类是:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

每行的功能是:

  • import java.io.io.ioexception imports ioexception类,处理与输入输出相关的错误。
  • 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

下面提供了生成“ socketClient”的代码:

public class SocketClient {
  public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
      InetAddress host = InetAddress.getLocalHost();
    Socket socket = null;
    ObjectOutputStream output = null;
    ObjectInputStream input = null;
    for(int i=0; i<5;i++){
        socket = new Socket(host.getHostName(), 9876);
        output = new ObjectOutputStream(socket.getOutputStream());
        System.out.println("Connection request to Socket Server");
        if(i==4)output.writeObject("exit");
        else output.writeObject(""+i);
        input = new ObjectInputStream(socket.getInputStream());
        String message = (String) input.readObject();
        System.out.println("Message: " + message);
        input.close();
        output.close();
        Thread.sleep(100);
    }
  }
}

下面提到了上述代码的描述:

  • 声明类别的socketclient。
  • 声明一种主要方法。
  • inetAddress.getLocalhost()被要求获取我们本地机器的IP地址。
  • 宣布一个变量插座可以保持与服务器的连接。
  • objectOutputstream-命名'输出用于将数据写入服务器。
  • 称为“ ObjectInputStream”类型的称为“输入”的变量用于从服务器检索或获取信息。
  • 启动一个循环执行5次。
  • 使用机器的IP地址和端口号构建套接字连接。
  • 数据通过“输出”对象发送到启动服务器。
  • 显示通知以表明某人想与您建立联系。
  • 基于i的值,消息要么发送到服务器或i的值。
  • 收到的消息被打印。
  • 关闭输入和输出流。
  • thread.sleep()方法用于暂停100毫秒的程序。

步骤3.运行SocketServer类
首先,运行socketServer类以启动服务器。
以下输出将出现:

Image description

上面的输出表明服务器已经启动并正在等待客户端连接。

步骤4.运行socketClient类
运行socketClient类。它将允许客户端与上述步骤中启动的服务器连接。
以下输出显示客户端已成功将连接请求和消息发送到服务器:

Image description

步骤5.客户端消息后服务器输出
socketServer类还将附带一些输出,这表明服务器已经与客户端建立了连接并在连接终止之前接收了所有消息:

Image description

这就是处理Java中的SocketException的全部。

结论
Java中的SocketException是一个检查的例外,指示插座创建或访问错误。要处理SocketException,重要的是要识别原因,实现特定解决方案,使用Try-Catch块,适当终止资源,并考虑实现错误记录以进行故障排除。已提供完整的实施教程以处理Java中的SocketException。