0

サーバーと電話の間で基本的なソケット接続を機能させようとしています。次のコードは Android エミュレーターでは完全に機能しますが、携帯電話で試してみると失敗し、その理由がわかりません。SO と Google で見つけたほとんどの提案を試しましたが、どれも機能しません。

私のサーバー コードは基本的な Ruby です: require 'socket'

server = TCPServer.new 2000

puts 'Server started!'
loop do
Thread.start(server.accept) do |client|
puts "Received client"

client.write "Connection established."

    while text = client.gets
        puts text
        client.puts text # Just echo the result back...
    end

    client.close
  end
end

私のクライアント コードは次のとおりです。setContentView(R.layout.activity_main);

    try{
        Socket s = new Socket("***", 2000);

        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

        PrintWriter out = new PrintWriter(s.getOutputStream());

        out.println("test\r\n"); 
        out.flush();
        out.close();            


    }catch(Exception e){

    }

}

このコードは、エミュレーターで予期される応答を返します。

Server started!
Received client
test

しかし、携帯電話で実行すると、次のように返されます。

Server started!
Received client

明らかに接続を確立しています。私が書いたさらに詳細なコードがいくつかあり、それもサーバーに書き戻します。エミュレーターは書き込みと受信を行いますが、しばらくすると、電話は「ピアによって接続が閉じられました」と報告されます。

どんなアイデアも素晴らしいでしょう!

編集:友人の電話でも動作するようです...だから今、私はさらに困惑しています...私はSony Xperiaを使用しています

4

2 に答える 2

0

入力ストリームから入力を読み取ることは決してないので、待機しているだけです。おそらく、バッファリングされたリーダーでreadLine()を呼び出すことです。また、出力ストリームコードを入力ストリームコードの前に配置することもできます。

于 2012-08-08T18:57:06.747 に答える
0

キャリア MTN のポート 2000 に問題があることがわかりました。別のポートを使用すると、問題が解決しました。

于 2012-08-10T13:55:06.530 に答える