簡體   English   中英

如何在Java中重新啟動serverSocket

[英]How to restart a serverSocket in java

我試圖添加重新啟動服務器功能,該功能會彈出所有播放器和線程,然后為新播放器啟動新的服務器套接字。 這就是我嘗試過的方法,但是當我重新啟動時,嘗試添加更多他們沒有連接的播放器嗎?

任何幫助都會很棒,謝謝。 或者,有沒有辦法在不關閉套接字的情況下從服務器彈出所有連接?

private volatile ServerSocket ss;

private Socket p1;
private Socket p2;

private GameSession ses;

private ObjectOutputStream top1;
private ObjectOutputStream top2;

 public void connectToClient() {
    try {
        ss = new ServerSocket(8000);

        while (true) {


            p1 = ss.accept();

            top1 = new ObjectOutputStream(p1.getOutputStream());

            p2 = ss.accept();

            top2 = new ObjectOutputStream(p2.getOutputStream());

            see = new GameSession(p1, p2, top1, top2);

            new Thread(see).start();

        }
    } catch (IOException ex) {
        System.err.println(ex);
    }
}

private void restartServer() {
    if (ss.isBound()) {
        try {
            ss.close();
            ss = new ServerSocket(8000);

            displayLog.append(new Date() + ": Server started at socket "
                    + ss.getLocalPort() + '\n');

        } catch (IOException ex) {
            System.err.println(ex);
        }
    }
}

您的restartServer方法不包含任何啟動新游戲的功能。 它所做的只是創建一個不執行任何操作的新ServerSocket close后,無需實例化新的ServerSocket ,而是調用connectToClient

private void restartServer() {
    if (ss.isBound()) {
        try {
            ss.close();
            connectToClient();

            displayLog.append(new Date() + ": Server started at socket "
                + ss.getLocalPort() + '\n');

        } catch (IOException ex) {
            System.err.println(ex);
        }
    }
}

重新啟動ServerSocket應該可以。 我假設您在與connectToClient不同的線程中調用restartServer 另外ServerSocker應該是volatile

  1. 停止線程(首先保留線程的實例)-線程關閉時,請先關閉客戶端套接字。
  2. 關閉ServerSocket
  3. 調用connectToCLient

關閉ServerSocket並創建一個新的容器並不能完成任何有用的工作。 這樣做的唯一作用是導致掛起的,不可接受的連接丟失。 刪除它。

您必須關閉可接受的套接字,並使客戶端通過嘗試重新連接對此作出反應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM