3

Android クライアントがコンピューター上のサーバーに接続し、Websocket 経由で BufferedWriter を使用してメッセージを送信する 2 つの Java アプリケーションがあります。

クライアント:

    try {
        toast("Sending...");
        Socket sock = new Socket(ip, PORT);
        OutputStream os = sock.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
        bw.flush();
        bw.write("Hello Server!");
        toast("Connected!");
    } catch (UnknownHostException e) {
        toast(e.getMessage());
    } catch (IOException e) {
        toast(e.getMessage());
    }

サーバー:

public static void main(String[] args) {
    ServerSocket server;
    ConnectionThread ct;
    Socket s;
    ExecutorService es = Executors.newSingleThreadExecutor();
    try {
        System.out.println("Starting server...");
        server = new ServerSocket(1337);
        s = server.accept();
        ct = new ConnectionThread(s);
        es.execute(ct);
    } catch (IOException ex) {
        ex.printStackTrace();
    }       
}

ConnectionThreadクラス:

public class ConnectionThread implements Runnable {
    private Socket sock;
    private InputStream is;
    private BufferedReader br;
    private boolean online;
    public ConnectionThread(Socket s) {
        System.out.println("Creating connection thread.");
        this.sock = s;
        online = true;
    }
    @Override
    public void run() {
        String input = "";
        try {
            System.out.println("Starting to read...");
            is = sock.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));

            while (online) {
                input = br.readLine();
                if(input != null){
                    System.out.print("Received message: ");
                    System.out.println(input);
                }

            }

            br.close();
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

サーバーを実行してからクライアントを実行すると、クライアントに「接続済み!」と表示されます。トースト、サーバーの出力は次のようになります。

Starting server...
Creating connection thread.
Starting to read...

というわけで、実際に接続しているように見えますが、メッセージが届きません。なぜこれが起こっているのか誰にも分かりますか?

4

3 に答える 3

4

サーバーは、改行で終了する完全な行を期待しています。試す:

bw.write("Hello Server!");
bw.newLine();
于 2012-10-16T14:54:09.240 に答える
0

こうやって…

String s = new String();

while ((br.readLine())!=null) {

                s = s+br.readLine();

                    System.out.print("Received message: ");
                    System.out.println(input);
                }

            }

     bw.println("Hello Server");
于 2012-10-16T14:54:43.310 に答える
0

クライアントでエンドラインを送信していないことに気付きました。そのため、\n 文字と一致しないため、BufferedReader.readline() は返されません。でもう一度試してください

        bw.write("Hello Server!\n");

クライアント側で。

于 2012-10-16T14:56:55.620 に答える