套接字编程无法在真正的Android设备中连接

时间:2015-12-23 10:28:05

标签: java android sockets

我想将数据(简单文本)从android发送到计算机并在计算机应用程序中显示收到的文本,因此我创建了2个应用程序,第一个在Android设备(客户端)中运行,第二个在计算机(服务器)中运行。我用java语言创建了两个应用程序。

当我在genymotion中运行android应用程序时,一切正常,两个应用程序都可以连接在一起,但是当我在真实设备应用程序中运行android应用程序无法连接在一起,而两者都在同一网络和IP地址是正确的。
计算机应用程序代码(服务器):

try {
     ServerSocket serverSocket = new ServerSocket(9000);
     Socket socket = serverSocket.accept();

     DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

     while(true){
         String message = bufferedReader.readLine();
         message(message);
     }
} catch (IOException e) {
     e.printStackTrace();
}

Android应用程序代码(客户端):

new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                message("Waiting for Connection...");
                socket= new Socket("192.168.1.6", 9000);
                message("Connected...");

                dataOutputStream = new DataOutputStream(socket.getOutputStream());
                bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

    btnSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(socket==null){ return; }

            try {
                String message = edtMessage.getText().toString() + "\n";
                dataOutputStream.write(message.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
         message(message);
     }
} catch (IOException e) {
     e.printStackTrace();
}

screen shot(application connected when i run android application in genymotion

请指导我解决这个问题。感谢

1 个答案:

答案 0 :(得分:0)

您无法在点击侦听器的处理程序中写入输出流。你也应该在一个线程中做到这一点。