0

私は単純なソケットクライアントサーバーアプリケーションをプログラムしています。Androidデバイスがサーバーになり、PCがクライアントになります。

サーバー側で、次のようにソケットを開きます。

        Socket s = null;
        try {
            mServerSocket = new ServerSocket(6000);
            Log.e("tag", getLocalIpAddress());
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (true) {
            Message m = new Message();
            m.what = MSG_ID;
            try {
                if (s == null)
                    s = mServerSocket.accept();
                BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                String st = null;
                st = input.readLine();
                mClientMsg = st;
                myUpdateHandler.sendMessage(m);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

そしてクライアント側:

    Socket socket;
    try {
         InetAddress serverAddr = InetAddress.getByName("10.0.2.2");
         socket = new Socket(serverAddr, 6000);
         PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
         out.println("Hello server");
         System.out.println("Sent message to server");
      } catch (UnknownHostException e1) {
         e1.printStackTrace();
      } catch (IOException e1) {
         e1.printStackTrace();
      }

サーバーを実行した後、クライアントを実行しましたが、常に表示されます

> java.net.ConnectException: Connection timed out: connect
    at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at main.main(main.java:19)

クライアント側の IP アドレスが正しくないようです。しかし、サーバーのIPアドレスが正確に何であるかはわかりません!

注: 私は実際のデバイスを使用し、USB デバッグ経由で接続します。

ありがとうございました。

4

1 に答える 1

1

接続するデバイスの正確な IP または解決可能なホスト名がわからない場合は、TCP を直接使用することはできません。

サーバー側でブロードまたはマルチキャストを実行してネットワーク全体でサーバーをアナウンスするか、サーバーに対してブロードまたはマルチキャストを実行してそのアドレスを検出することを考えるかもしれません。ただし、それは作業中のアプリケーションによって異なります。

于 2013-07-31T04:17:51.243 に答える