0

オブジェクトをサーバーに送信する際に問題が発生しています。現在、サーバーをセットアップしてクライアントをリッスンしています。クライアントは接続し、テスト オブジェクト (文字列のみ) を送信し、それをコマンド ラインに出力します。送信された最初の文字列に対しては機能しますが、それ以降は機能しません。

サーバー (Hivemind.java):

    // Open server socket for listening
    ServerSocket ss = null;
    boolean listening = true;
    try {
        ss = new ServerSocket(PORT_NUMBER);
    } catch (IOException e) {
        System.err.println("Cannot start listening on port " + PORT_NUMBER);
        e.printStackTrace();
    }

    // While listening is true, listen for new clients
    while (listening) {
        Socket socket = ss.accept();
        ServerDispatcher dispatcher = new ServerDispatcher(socket);
        dispatcher.start();
    }

    // Close the socket after we are done listening
    ss.close();

サーバースレッド (ServerDispatcher):

public ServerDispatcher(Socket socket) {
    super("ServerDispatcher");
    this.socket = socket;
}

public void run() {
    System.out.println("Client connected");
    try {
        input = socket.getInputStream();
        objInput = new ObjectInputStream(input);
        Object obj = null;

        try {
            obj = (String)objInput.readObject();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ServerDispatcher.class.getName()).log(Level.SEVERE, null, ex);
        }

        System.out.println(obj);
    } catch (IOException ex) {
        Logger.getLogger(ServerDispatcher.class.getName()).log(Level.SEVERE, null, ex);
    }

接続クラス (HivemindConnect.java):

public HivemindConnect(int port) {
    this.port = port;
    url = "localhost";
}

public HivemindConnect(int port, String url) {
    this.port = port;
    this.url = url;
}

public void connect() {
    try {
        socket = new Socket(url, port);
        output = socket.getOutputStream();
        objOutput = new ObjectOutputStream(output);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void close() {
    try {
        objOutput.close();
        output.close();
        socket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void send(Object obj) {
    try {
        objOutput.writeObject(obj);
        objOutput.flush();
    } catch (IOException ex) {
        Logger.getLogger(HivemindConnect.class.getName()).log(Level.SEVERE, null, ex);
    }
}

CustomerTopComponent:

// When the TC is opened connect to the server
@Override
public void componentOpened() {
    hivemind = new HivemindConnect(9001);
    hivemind.connect();
}

private void btnSendActionPerformed(java.awt.event.ActionEvent evt) {
    hivemind.send(txtText.getText());
}

// When the TC is closed close the connection to the server
@Override
public void componentClosed() {
    hivemind.close();
}
4

1 に答える 1

1

次のようなループが必要です。

  while(objInput.available()>0){
    Object obj = null;
    obj = (String)objInput.readObject();
    System.out.println(obj);}

または似たようなもの。

于 2013-01-15T15:59:06.900 に答える