【问题标题】:Closing Server Socket关闭服务器套接字
【发布时间】:2018-03-16 18:19:59
【问题描述】:

我正在尝试关闭服务器,但收到:

 java.net.SocketException: 套接字关闭
    在 java.net.PlainSocketImpl.socketAccept(本机方法)
    在 java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
    在 java.net.ServerSocket.implAccept(ServerSocket.java:530)
    在 java.net.ServerSocket.accept(ServerSocket.java:498)
    在 THREAD.MioServer.AvviaServer(MioServer.java:21)
    在 THREAD.Avviamento.run(Avviamento.java:16)
    在 java.lang.Thread.run(Thread.java:745)

这是我的代码:

package THREAD;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
import java.util.Scanner;

public class MioServer {
public int port;

public MioServer(int port) {
    super();
    this.port = port;
}
ServerSocket serverSocket=null;
Socket socket=null;

public void AvviaServer() throws IOException {
    serverSocket=new ServerSocket(port);
    System.out.println("serverSocket partito "+ port);
    socket=serverSocket.accept();
    System.out.println("socket partita");
    Scanner in=new Scanner(socket.getInputStream());
    PrintWriter out=new PrintWriter(socket.getOutputStream());
    while (true) {
        String line=in.nextLine();
        if (line=="quit") {
            break;
        }

    }
}
public void ferma() throws IOException {
    if (socket==null); {
        socket=new Socket();
        socket.close();
        System.out.println("cretino");
        serverSocket.close();
    }
    if (socket!=null) {
        socket.close();
        socket=null;
        serverSocket.close();
        System.out.println("chiuso server(?)");
        serverSocket=null;
      }
    }
   }

package THREAD;

import java.io.IOException;

public class Avviamento implements Runnable{
public MioServer server;

public Avviamento(MioServer server) {
    super();
    this.server = server;
}

@Override
public void run() {
    try {
        server.AvviaServer();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 }
}



package THREAD;

import java.io.IOException;

public class Fermamento implements Runnable{
public MioServer server;

public Fermamento(MioServer server) {
    super();
    this.server = server;
}

@Override
public void run() {
    try {
        server.ferma();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 }
}

听众:

package LISTENERS;

import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;

import THREAD.*;

public class MioListener implements ActionListener {
    public int port=3000;
    public MioServer server=new MioServer(3000);

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton b=(JButton) e.getSource();
        Avviamento avvio=new Avviamento(server);
        Thread avviamento=new Thread(avvio);
        Fermamento ferma=new Fermamento(server);
        Thread fermamento=new Thread(ferma);
        if (b.getText().equals("Avvia")) {
            System.out.println("Tasto avvia premuto");
            avviamento.start();
        }
        if (b.getText().equals("Stop")) {
            System.out.println("Tasto stop premuto");
            fermamento.start();
        }
    }

感谢您的帮助。

【问题讨论】:

    标签: java sockets serversocket


    【解决方案1】:

    我正在尝试关闭服务器,但收到:

    java.net.SocketException: Socket closed
    

    难怪您的服务器线程在Fermamento 线程的server.ferma() 关闭serverSocket 时抛出异常,就像从服务器脚下拉扯地毯一样。

    您可以简单地通过以下方式捕获异常:

        try { socket=serverSocket.accept(); } catch (SocketException e) { return; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 2020-09-17
      • 2017-03-06
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多