通过套接字从手机向计算机发送命令

问题描述 投票:0回答:1

我正在尝试使用套接字将命令从手机发送到我的电脑。我在这里尝试了答案:Android and PC Socket connection

但经过一些挖掘,我发现你需要使用Async任务,所以我尝试了这个:Using AsyncTask for android network connection

但出于某种原因,我的套接字超时了。有没有办法找出原因?因为从错误我不能说:

来自Logcat的错误:enter image description here

这是客户端代码:

public class MainActivity extends AppCompatActivity {

    private Socket client;
    private PrintWriter printwriter;
    private EditText textField;
    private Button button;
    private String message;

    private static final int SERVERPORT = ####;
    private static final String SERVER_IP = "########";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textField = (EditText) findViewById(R.id.editText1); // reference to the text field
        button = (Button) findViewById(R.id.button1); // reference to the send button

    }

    public void onClick(View view) {
        message = textField.getText().toString();
        textField.setText(""); // Reset the text field to blank
        new AsyncAction().execute();
    }

    private class AsyncAction extends AsyncTask<String, Void, String> {
        protected String doInBackground(String... args) {
            try {
                System.out.println("background running");
                System.out.println(message);
                client = new Socket(SERVER_IP, SERVERPORT); // connect to server
                System.out.println(client.isConnected());
                System.out.println("test");
                printwriter = new PrintWriter(client.getOutputStream(), true);
                printwriter.write(message); // write the message to output stream

                printwriter.flush();
                printwriter.close();
                client.close(); // closing the connection

            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

}
java android sockets pc
1个回答
0
投票

我用Java为此编写了一个Server,并在模拟器中对其进行了测试。我有两件事要做:

  1. 如果您使用的是Android模拟器,则服务器IP为“10.0.2.2”。 LocalHost是de Emulator虚拟机。
  2. 您的应用程序需要清单中的权限Internet

这是服务器代码

/**
 *
 * @author Jean-Pierre
 */
public class SocketServer {

    private static final int portnumber = 4444;
    public static void main(String[] args) {
        SocketServer socketServer = new SocketServer();
        socketServer.run();
    }    

    /**
     * Reads a String from the client
     * Converts it to Uppercase
     * and sends it Back.
     */
    private void run() {
        try {
            ServerSocket serverSocket = new ServerSocket(portnumber);
            Socket clientSocket = serverSocket.accept();
            System.out.println("connected with :" + clientSocket.getInetAddress());
            PrintWriter out = 
                    new PrintWriter(clientSocket.getOutputStream(), true);
            InputStreamReader is = 
                    new InputStreamReader(clientSocket.getInputStream());
            BufferedReader in = 
                    new BufferedReader(is);
            while (true) {
                String line = in.readLine();
                if (line != null) {
                    System.out.println("recieved:" + line);
                    out.println(line.toUpperCase()); 
                }    
            }
        } catch (IOException ex) {
            Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.