-1

プッシュサーバーについてもう1つ質問があります。何らかの理由で、サーバーはその存続期間中に1つの接続のみを受け入れます。最初の接続が閉じられた後でも、サーバーは何もしません。接続を拒否していないため、スレッドが生成されていないのではないかと疑っています。

サーバーへのコードは次のとおりです。http://docs.oracle.com/javase/tutorial/networking/sockets/examples/KKMultiServer.java

必要なものだけなので、この例を使用しました。このコードは変更しませんでした。それは私が実際に使ったスレッドです...

import java.net.*;
import java.io.*;

public class KKMultiServerThread extends Thread {
    private Socket socket = null;

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

    public void run() {
            try {
                    final PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String inputLine, outputLine;
                    out.println("connected");
                    boolean loggedin = false;
                    String username="";
                    String password="";
                    String deviceid="";
                    while (true) {
                    //deal with login handshake
                            if ((inputLine = in.readLine()) == null) inputLine="";
                            if (!loggedin) {
                                   Logs the user in...
                                   Also does things with files and keeps reading and writing to the client...
                    }
                    out.close();
                    in.close();
                    socket.close();
            } catch (IOException e) {
                    e.printStackTrace();
            }
    return;
    }
}

何がうまくいかない可能性がありますか?ソケットとすべてのストリームを必要に応じて閉じますが、それでも機能するはずです。

今後ともよろしくお願いいたします。

4

1 に答える 1

4

if((inputLine = in.readLine())== null)inputLine = "";

このコード行はグレードAのナンセンスです。inputLineがnullの場合、ピアはソケットを閉じているため、ループを終了して自分でソケットを閉じる必要があります。現在、EOS条件を無視し、永久にループしています。

于 2012-12-29T01:55:31.403 に答える