当前位置: 首页 > 知识库问答 >
问题:

Java套接字数组

岳承悦
2023-03-14

我正在创建服务器和客户端java应用程序。我想创建一个数组来存储我的套接字。我正在使用eclipse,当我输入这一行时:

Socket[] sockets = new Socket[3];

Eclipse给我一个错误说资源类型Socket[]没有实现java.lang.AutoCloseable。

我怎样才能解决这个问题?

谢谢你

尝试/捕捉语句:

try (
                Socket[] sockets = new Socket[3]; //Line giving me error
                ServerSocket serverSocket =
                    new ServerSocket(Integer.parseInt(ip));
                Socket clientSocket = serverSocket.accept();     
                ServerClient client = new ServerClient(clientSocket);

                PrintWriter out =
                    new PrintWriter(clientSocket.getOutputStream(), true);                   
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(clientSocket.getInputStream()));
                //User input
                BufferedReader stdIn =
                    new BufferedReader(
                        new InputStreamReader(System.in))
            ) {
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    out.println(inputLine);
                }
            } catch (IOException e) {
                System.out.println("Exception caught when trying to listen on port "
                    + port + " or listening for a connection");
                System.out.println(e.getMessage());
                continue;
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

共有3个答案

孙凌龙
2023-03-14

当我运行你的代码时,我收到了这个错误消息

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: try-with-resources not applicable to variable type
    (java.net.Socket[] cannot be converted to java.lang.AutoCloseable)

我建议您在定义套接字数组时不要对资源使用try-catch块。

       try (
            your rest of code
        ) { 
    define your array here --->  Socket[] sockets = new Socket[3];
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                out.println(inputLine);
            }
        } catch (IOException e) {
           your rest of code 

注意:Socket类实现了Closeable和AutoCloseable,但数组不能像您尝试的那样在try块中定义

包子航
2023-03-14

try with resources块中定义的资源都必须是自动关闭的。这就是它的目的。套接字[]不可自动关闭,因此无法在此定义。在尝试之前移动声明。对于您在其上获得错误的任何其他资源,同上。不要将其视为一般声明块。事实并非如此。

山乐生
2023-03-14

虽然Socket类本身实现了AutoCloseable接口,但Socket数组-没有。

简单来说:你不能打开或关闭一个数组。

 类似资料:
  • 我最近一直在玩套接字,但是我遇到了一个问题…当我从服务器接收数据时,我得到一个“java.net.套接字异常:套接字关闭”异常。我没有在任何地方关闭套接字,事实上,我唯一使用关闭()的地方是扫描仪上从System.in读取文本; 以下是我的代码: 客户: 服务器: 数据包发送者: 客户端接收器: 数据包接收器:

  • 我正在尝试制作一个“messenger”(只是为了真正学习),我对Socket/ServerSocket还很陌生,目前正在制作网络部分。而且,我知道客户网络还不完善。我曾试图完成它,但我被难倒了。 ServerMain: 服务器网络(线程): } ClientMain: } 客户端网络(线程): 这是我得到的错误,当我启动服务器,然后客户端:它不应该说"消息收到",因为我实际上没有发送消息

  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi

  • 问题内容: 我有一个侦听某些x端口的套接字。 我可以从客户端应用程序将数据发送到套接字,但是无法从服务器套接字获得任何响应。 ..此代码部分从服务器读取数据。 但是,直到关闭服务器上的套接字,我才能从服务器读取任何内容。服务器代码不受我控制,无法对其进行编辑。 如何从客户端代码中克服这个问题。 谢谢 问题答案: 为了在客户端和服务器之间进行通信,必须明确定义协议。 客户端代码将阻塞,直到从服务器收

  • 问题内容: Windows下java中的最大套接字数是多少?我该如何更改? 问题答案: 这在很大程度上取决于为操作系统配置的最大文件描述符(Windows中的句柄)数量。每个打开的文件或套接字使用一个文件描述符。例如,在Solaris中,max fd的默认值为65536。可能会有使用FD池的其他文件,因此限制了套接字的上限,除非操作系统经过调整以增加FD的数量 在Windows NT / 2000

  • 问题内容: 我正在使用Java套接字构建一个简单的客户端/服务器应用程序,并尝试使用ObjectOutputStream等。 我一直在这个URL http://java.sun.com/developer/technicalArticles/ALT/sockets上关注该教程,当它谈到通过套接字传输对象时,它从一半开始。 请参阅我为客户端提供的代码http://pastebin.com/m37e4