代码之家  ›  专栏  ›  技术社区  ›  JimBelushi2

通过套接字[duplicate]发送对象的ArrayList

  •  0
  • JimBelushi2  · 技术社区  · 7 年前

    我编写了一个简单的服务器和客户端示例,如下所示。

    客户:

    • 打开连接
    • 获取outputstream,写入流并关闭输出流
    • 获取inputstream并从流中读取。此时出现异常

      public class DateServer {
      public static void main(String[] args) throws InterruptedException {
      ServerSocket serverSocket = null;
      Socket client = null;
      try {
          serverSocket = new ServerSocket(6013);
          while (true) {
              client = serverSocket.accept();
              OutputStream outputStream = client.getOutputStream();
              InputStream inputStream = client.getInputStream();
      
              System.out.println("" + outputStream + "-" + inputStream);
      
              BufferedReader bufferedReader = new BufferedReader(
                      new InputStreamReader(inputStream));
      
              String line = null;
              while ((line = bufferedReader.readLine()) != null) {
                  System.out
                          .println("Message recieved from client ::" + line);
              }
      
              PrintWriter printWriter = new PrintWriter(outputStream, true);
      
              printWriter.println(new java.util.Date().toString());
      
              client.close();
          }
      } catch (IOException exception) {
          exception.printStackTrace();
          System.err.println(exception);
      }
          }
      
          }
      

    客户:

        public class DateClient {
    
    public static void main(String[] args) throws UnknownHostException,
            IOException, InterruptedException {
        Socket sock = new Socket("127.0.0.1", 6013);
        OutputStream outputStream = sock.getOutputStream();
        InputStream inputStream = sock.getInputStream();
    
        System.out.println("" + outputStream + "-" + inputStream);
    
        PrintWriter printWriter = new PrintWriter(outputStream, true);
        printWriter.println("Hi Server");
    
        outputStream.close();
    
        System.out.println(sock.isConnected());
    
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream));
        String line;
        while ((line = bufferedReader.readLine()) != null) { // Exception 
            System.out.println(line);
        }
    
    }
    
    }
    

    客户端中出现低于套接字关闭异常。你能告诉我原因吗。

      Exception in thread "main" java.net.SocketException: Socket closed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:146)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:153)
    at java.io.BufferedReader.readLine(BufferedReader.java:316)
    at java.io.BufferedReader.readLine(BufferedReader.java:379)
    at edu.iub.cs.httpserver.DateClient.main(DateClient.java:32)
    
    0 回复  |  直到 12 年前
        1
  •  11
  •   user207421    12 年前

    JAVA网SocketException套接字已关闭 此异常意味着您关闭了套接字,然后继续尝试使用它。

    os.close();
    

    你把它关在这里了。关闭套接字的输入或输出流会关闭另一个流和套接字。

        2
  •  4
  •   slavoo user3099232    12 年前

    java.net.SocketException 只有当你关闭 OutputStream (或)从服务器读取数据前的套接字。

    从代码中删除:

    OutputStream.close(); 
    

    然后试试。。

    推荐文章