java - 安卓利用Socket和PC通信无法连接?
PHP中文网
PHP中文网 2017-04-18 10:53:50
0
6
830
  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中文网

认证0级讲师

membalas semua(6)
迷茫

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

Peter_Zhu

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);
Peter_Zhu

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.

PHPzhong

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

洪涛

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.

阿神

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!