0

私は非常に単純で基本的なJavaクライアント/サーバープログラムを使用しています。これは正常に機能します。しかし、現在Androidクライアントを作成しようとしていますが、Androidクライアントからサーバーに接続できませんでした。私は通常のクライアントに使用するのとほぼ同じコードをAndroidネットワークコードに使用しています。私のAndroidコードは単純で、onCreateからこのスレッドを開始するだけです。

private int serverPort = 8889;
private String serverIP = "192.168.5.230";
private Socket socket = null;

private Thread clientThread = new Thread("ClientThread") {
    @Override
    public void run() {
        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress(serverIP, serverPort), 1000);
            DataInputStream din = new DataInputStream( socket.getInputStream());
            DataOutputStream dout = new DataOutputStream(socket.getOutputStream());

            while (true) {
                String message = din.readUTF();
                setPicture("picture1");
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
};

ポートは、サーバーが実行されている正しいポートであり、IPアドレスも同様です(ローカルホストを使用できないことがわかっているため、ifconfigから取得しました)。同じポートとIPアドレスで通常のPCクライアントを実行すると、接続が確立されます。しかし、Androidデバイスでこのコードを実行すると、接続しようとするとソケットがタイムアウトします。

誰かが私が間違っているところについて何か提案がありますか?

4

1 に答える 1

1

マニフェストファイルにアクセス許可要件を追加したことを再確認してください。

<uses-permission android:name="android.permission.INTERNET" />

ただし、おそらくもっと重要なのは、192.168.xxがローカルまたはルーティング不可能なネットワークであるため、同じネットワーク上にいる必要があるか、192.168.5.230アドレスに到達する方法を知っているネットワークである必要があります。デバイスで試してみると機能しないとのことですが、実行時にローカルWi-Fiで実行していますか、それともモバイルネットワークで実行していますか?モバイルを使用している場合は、wifiから試してください。

于 2013-03-21T04:25:10.220 に答える