2017-04-22 8 views
0

アンドロイドアプリを使用してラズベリーパイを制御しようとしています。私はこれを行うためにwebsocketを使用しています。テストとして、私は、pythonスクリプトを実行するapp(クライアント)からhost(pi)への出力メッセージを送信したいだけです。私は実行するpythonスクリプトを取得することはできません。 ここにある私のコード:websocketを使用しているときにpythonスクリプトをjava経由で実行できません

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(); 
    } 
} 
} 

メッセージの後には、システムの出力はありません「私は聞いていますオンポート: "

答えて

0

クライアントがサーバー/ホストプロセスにメッセージを送信していません。これは、PrintWriterautoFlushの場合、println,printfまたはformatのいずれかのメソッドが呼び出されたときに出力ストリームをフラッシュするためです。これはwriteメソッドを除きます。 PrintWriterを参照してください。

別のオプションは、明示的にwriteflushメソッドを呼び出すことによって、またはソケットを閉じる前に、出力ストリームを閉じることにより、出力をフラッシュすることです:

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(); 
    } 
} 

あなたのホストにいくつかのより多くのデバッグメッセージを追加したい場合がありますコード;第1に、クライアントが実際にサーバーに接続していることを確認し、着信メッセージを表示し、サブプロセスの結果をチェックします。

関連する問題