Can';t在使用websocket时通过java执行python脚本

Can';t在使用websocket时通过java执行python脚本,java,android,python,Java,Android,Python,我正试图用android应用程序控制我的覆盆子圆周率。我正在使用websocket来实现这一点。作为测试,我只想从应用程序(客户端)向主机(pi)发送一条输出消息,该主机将执行python脚本。我无法执行python脚本。 这是我的密码: host.java import java.net.ServerSocket; import java.net.Socket; import java.io.OutputStream; import java.io.PrintStream; import ja

我正试图用android应用程序控制我的覆盆子圆周率。我正在使用websocket来实现这一点。作为测试,我只想从应用程序(客户端)向主机(pi)发送一条输出消息,该主机将执行python脚本。我无法执行python脚本。 这是我的密码:

host.java

import java.net.ServerSocket;
import java.net.Socket;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.IOException;

public class host{
public static void main(String args[]){

    try(ServerSocket serverSocket = new ServerSocket(4141)) {

        System.out.println("I'm listening on port: " +serverSocket.getLocalPort());

        while (true) {



            try {
                    Socket socket = serverSocket.accept();

                OutputStream output = socket.getOutputStream();
                BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                String in = "";
                while ((in = input.readLine()) != null){
                    System.out.println("Message Received: " + in);
                    if(in.equals("test")){
                        Process p = Runtime.getRuntime().exec("python test.py");

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

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

以下是我的android应用程序代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import java.net.*;

import java.net.Socket;

public class MainActivity extends AppCompatActivity {

String add = "192.168.100.7";
int port = 4141;

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

    Button test = (Button)findViewById(R.id.test);

    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            test();
        }
    });



private void test() {
    try {

        Socket socket = new Socket(add, port);
        PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
        output.write("test");
        socket.close();

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

消息“我正在侦听端口:”后没有系统输出。

客户端没有将消息发送到服务器/主机进程。这是因为启用了
autoFlush
PrintWriter
仅在调用
println
printf
format
方法之一时刷新输出流。这不包括
write
方法。看

另一个选项是通过在
write
之后调用
flush
方法显式刷新输出,或者在关闭套接字之前关闭输出流:

private void test() {
    try {

        Socket socket = new Socket(add, port);
        PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
        output.write("test");
        output.flush();    # or output.close();
        socket.close();

    }catch(IOException e){
        e.printStackTrace();
    }
}
您可能希望向主机代码中添加更多调试消息;首先,确保客户端实际连接到服务器,显示传入消息,并检查子进程的结果