Java套接字客户端连接和断开问题

标签 java client serversocket

我制作了这个脚本:

public class Server {
    ServerSocket serv = null;
    ObjectInputStream in = null;
    ObjectOutputStream out = null;
    Socket conn = null;

    public Server() { 
        setLogger(getClass());
        setupSocketServer();
        listen();
    }

    public void listen() {
        try {
            while (true) {
                conn = serv.accept();
                getLogger().log(new LogRecord(Level.INFO, "Connection established from: " + conn.getInetAddress().getHostAddress()));
                out = new ObjectOutputStream(conn.getOutputStream());
                in = new ObjectInputStream(conn.getInputStream());
            }
        }
        catch (IOException ex) {
            getLogger().log(new LogRecord(Level.SEVERE, "Connection dropped from: " + conn.getInetAddress().getHostAddress()));
        } 
    }

    public void setupSocketServer() {
        try {
            serv = new ServerSocket(Config.PORT_NUMBER, Config.MAX_CONNECTIONS);
            getLogger().log(new LogRecord(Level.INFO, "Starting Server on: " + serv.getInetAddress().getHostAddress() + ":" + serv.getLocalPort()));
        }
        catch (IOException e) {
            getLogger().log(new LogRecord(Level.SEVERE, "Socket can not connect to host address"));
            System.exit(0);
        }
    }

    public static void main(String[] args) {
        new Server();
    }

}

但是每当我打开客户端连接,然后再次关闭它并尝试重新打开时,服务器已经关闭。我希望能够保持无限的连接,允许多人连接。我该如何去做呢?

最佳答案

在您的服务器上尝试此代码, 它由多个客户端组成,服务器将始终保持监听状态。

public class ServerTest {

    ServerSocket s;

    public void go() {

        try {
            s = new ServerSocket(44457);

            while (true) {

                Socket incoming = s.accept();
                Thread t = new Thread(new MyCon(incoming));
                t.start();
            }
        } catch (IOException e) {

            e.printStackTrace();
        }

    }

    class MyCon implements Runnable {

        Socket incoming;

        public MyCon(Socket incoming) {

            this.incoming = incoming;
        }

        @Override
        public void run() {

            try {
                PrintWriter pw = new PrintWriter(incoming.getOutputStream(),
                        true);
                InputStreamReader isr = new InputStreamReader(
                        incoming.getInputStream());
                BufferedReader br = new BufferedReader(isr);
                String inp = null;

                boolean isDone = true;

                System.out.println("TYPE : BYE");
                System.out.println();
                while (isDone && ((inp = br.readLine()) != null)) {

                    System.out.println(inp);
                    if (inp.trim().equals("BYE")) {
                        System.out
                                .println("THANKS FOR CONNECTING...Bye for now");
                        isDone = false;
                        s.close();
                    }

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                try {
                    s.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }

        }

    }

    public static void main(String[] args) {

        new ServerTest().go();

    }

}

关于Java套接字客户端连接和断开问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056913/

相关文章:

Java Web Restful 客户端不起作用

JavaFX2.0 webview不渲染页面?

java - 如何使用@RequestParam将数组的默认值设置为空

java - 套接字异常 : socket is closed

java - MMO如何处理真人游戏的每一刻为成千上万的玩家计算和发送数据包?

java - 如何使用 apache poi 更改特定 word 文档的颜色?

java - 聊天客户端发生奇怪的线程

mysql gui 工具 64 位 rpm

c# - 用于 Web 服务的 WCF 客户端,具有 WS-Security、签名 header 、身份验证 token 和正文加密

Java:客户端是否可以两次使用远程计算机上的同一端口?