ホームページ  >  に質問  >  本文

java - 安卓利用Socket和PC通信无法连接?

  1. 安卓利用Socket和PC通信无法连接

  2. 已经设置了 <uses-permission android:name="android.permission.INTERNET"/>

  3. 相同代码PC端和PC端通信没有问题

  4. 会在new Socket(ip,port)这里一直堵塞;

服务器代码

public ServiceThread(Socket s) throws IOException {
        socket = s;
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                .getOutputStream())), true);
        in=socket.getInputStream();
    }

    public void run() {
        try {
            out.println("SERVER DATA");
            System.out.println("closing...");
            byte[] temp = new byte[1024];
            int length=-1;
            while((length=in.read(temp))>0){
                System.out.println(temp);
            }
            out.close();
            socket.close();
        } catch (Exception e) {
        }
    }
}

public class MyServer {
    static final int PORT = 8778;

    public static void main(String[] args) throws IOException {
        ServerSocket s = new ServerSocket(PORT);
        System.out.println("Server 启动");
        Socket socket = s.accept();
        ServiceThread t = new ServiceThread(socket);
        t.start();
    }
}

客户端代码

Socket socket = null;
                BufferedWriter out = null;
                try {
                    socket = new Socket(ip, 8778);
                    out = new BufferedWriter(new OutputStreamWriter(socket
                            .getOutputStream()));
                    out.write(sendViewA.getText().toString());
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                Socket socket = null;
                BufferedReader in = null;
                try {
                    socket = new Socket(ip, 8778);
                    in = new BufferedReader(new InputStreamReader(socket
                            .getInputStream()));
                    String fromServerStr = in.readLine();
                    Toast.makeText(OUTActivity.this,fromServerStr,Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
PHP中文网PHP中文网2716日前834

全員に返信(6)返信します

  • 迷茫

    迷茫2017-04-18 10:55:50

    これは IP の問題であるはずです:

    1. デバイスがエミュレータの場合: コンピュータのホストにアクセスするには、対応するエミュレータの IP アドレスを確認してください。通常、対応するエミュレータの公式 Web サイトで入手できます (具体的な IP アドレスはエミュレータによって異なります)。

    1. Genymotion: 10.0.3.2

    2. Androidエミュレータ: 10.0.2.2

    2. デバイスが実機の場合は、携帯電話と実機が同じ LAN 内にあることを確認するのが最善です (ラップトップの場合は、携帯電話を使用してコンピューターの WiFi に接続することをお勧めします)アクセスする前に)cmdでIPアドレスを確認できます

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:55:50

    以前にもこの問題に遭遇しました。クライアントのソケット接続コードを次のコードに変更してみてください。
    クライアント:

    リーリー

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:55:50

    携帯電話と PC が同じ LAN 上にある場合は、ルーターでワイヤレス分離が有効になっているかどうかに注意する必要があります。これも落とし穴になる可能性があります。

    返事
    0
  • PHPz

    PHPz2017-04-18 10:55:50

    エラーレポートを見ると、ソケットを UI スレッドで実行させましたか? ——Android では、Android 4.0 以降、UI スレッドでの Socket の使用が許可されず、Socket を使用するには新しいスレッドを開始する必要があります

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:55:50

    NetworkOnMainThreadException、メイン スレッドでのソケット関連の操作が含まれていますか?
    最初にコードを実行します。現在のクライアント コードが startClient() に記述されていると仮定すると、このコードを実行のために子スレッドに配置する必要があります。 リーリー

    実際には、ビジネスコードに関連するこのスレッドとメインスレッド (UI スレッド) とのやり取りも処理する必要があります。

    まずはメインスレッド (UI スレッド) の違い/関係を理解することをお勧めします。とサブスレッドを参照して、スレッド通信の実装を見てください。

    返事
    0
  • 阿神

    阿神2017-04-18 10:55:50

    ログには「メインスレッド例外のネットワーク」と明記されています。上記のように、新しく開かれたスレッドを使用してネットワーク操作を実行しましょう。

    返事
    0
  • キャンセル返事