Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu835

membalas semua(6)saya akan balas

  • 迷茫

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

    Ini sepatutnya menjadi masalah IP:

    1. Jika peranti anda ialah emulator: Sila semak IP emulator yang sepadan untuk mengakses hos komputer Secara amnya, ia tersedia di tapak web rasmi emulator yang sepadan (IP khusus emulator berbeza)

    1. Genymotion: 10.0.3.2

    2. Emulator Android: 10.0.2.2

    2. Jika peranti anda adalah mesin sebenar, sebaiknya pastikan telefon mudah alih dan mesin sebenar berada dalam LAN yang sama (jika ia adalah komputer riba, adalah disyorkan untuk menggunakan telefon bimbit untuk menyambung ke WiFi komputer sebelum mengakses). Anda boleh menyemak alamat IP dalam cmd sendiri

    balas
    0
  • 天蓬老师

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

    Saya pernah mengalami perkara ini sebelum ini. Cuba tukar kod sambungan soket pelanggan kepada yang berikut.
    Pelanggan:

    socket = new Socket();
    socket.connect(new InetSocketAddress("1.1.9.30",8080), 5000);
    

    balas
    0
  • 天蓬老师

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

    Jika telefon mudah alih dan PC kedua-duanya berada pada LAN yang sama, anda perlu memberi perhatian sama ada pengasingan wayarles didayakan pada penghala Ini juga boleh menjadi perangkap.

    balas
    0
  • PHPz

    PHPz2017-04-18 10:55:50

    Melihat laporan ralat anda, adakah anda membiarkan Soket berjalan dalam urutan UI? ——Pada Android, selepas Android 4.0, Socket tidak dibenarkan untuk digunakan dalam urutan UI dan urutan baharu perlu dimulakan untuk menggunakan Socket

    balas
    0
  • PHP中文网

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

    NetworkOnMainThreadException, adakah ia melibatkan operasi berkaitan Soket dalam urutan utama?
    Biar kod dijalankan dahulu untuk pelaksanaan :

    
    new Thread(new Runnable() {
            @Override
            public void run() {
                startClient();
            }
        }).start();
        

    Sebenarnya, anda juga perlu berurusan dengan interaksi antara utas ini dan utas utama (utas UI), yang berkaitan dengan kod perniagaan
    Adalah disyorkan untuk memahami dahulu perbezaan/hubungan antara utas utama (benang UI) dan sub-benang , dan kemudian lihat pada pelaksanaan komunikasi benang.

    balas
    0
  • 阿神

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

    Log dengan jelas menyatakan "rangkaian pada pengecualian utas utama". Mari gunakan utas yang baru dibuka untuk melaksanakan operasi rangkaian seperti yang dinyatakan di atas

    balas
    0
  • Batalbalas