Can';t在使用websocket时通过java执行python脚本
我正试图用android应用程序控制我的覆盆子圆周率。我正在使用websocket来实现这一点。作为测试,我只想从应用程序(客户端)向主机(pi)发送一条输出消息,该主机将执行python脚本。我无法执行python脚本。 这是我的密码: host.javaCan';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
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();
}
}
您可能希望向主机代码中添加更多调试消息;首先,确保客户端实际连接到服务器,显示传入消息,并检查子进程的结果