netcatを使いandroidからMacに文字を送りたいです。
#MainActivity.java
java
1import android.app.Activity; 2import android.os.Bundle; 3import android.view.View; 4import android.widget.Button; 5 6import java.io.*; 7import java.net.*; 8 9 10 11public class MainActivity extends Activity { 12 Button button; 13 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 20 button = findViewById(R.id.button); 21 button.setOnClickListener(new View.OnClickListener() { 22 @Override 23 public void onClick(View v) { 24 sendstring(); 25 } 26 }); 27 } 28 29 30 public void sendstring() { 31 try { 32 while(true){ 33 Socket socket = new Socket("アドレス", ポート番号); 34 OutputStream os = socket.getOutputStream(); 35 36 BufferedWriter bufwriter 37 = new BufferedWriter(new OutputStreamWriter( os ) ); 38 bufwriter.write("こんにちは"); 39 bufwriter.newLine(); 40 41 42 bufwriter.close(); 43 socket.close(); 44 } 45 } 46 47 catch( IOException e ) { 48 System.err.println("IO Error!"); 49 System.exit(-1); 50 } 51 52 } 53}
$ netcat -l -p ポート番号
をして、androidでアプリを起動させましたが入出力がうまくいってないみたいで、System.exit(-1);でアプリが終了してしまいました
どこが間違っているのか教えていただけないでしょうか?
#変更したコード
keicha_hrsさんから教えていただいた通り、UIスレッドではない、別のスレッドを作成して通信処理を実装しなければなならないのでAsyncTaskを使うとうまくいきました。
java
1package com.example.ueday.netcat; 2 3import android.app.Activity; 4import android.os.AsyncTask; 5import android.support.v7.app.AppCompatActivity; 6import android.os.Bundle; 7import android.view.Menu; 8import android.view.View; 9import android.widget.Button; 10import android.widget.TextView; 11import android.widget.Toast; 12 13import java.io.BufferedReader; 14import java.io.BufferedWriter; 15import java.io.IOException; 16import java.io.InputStreamReader; 17import java.io.OutputStream; 18import java.io.OutputStreamWriter; 19import java.net.Socket; 20import java.net.UnknownHostException; 21 22public class MainActivity extends Activity { 23 24 private TextView mTextView; 25 private String mHost = "google.com"; 26 private int mPort = 80; 27 private String mPath = ""; 28 private String mUserAgent = "Mozilla/5.0 (Linux; U; Android 4.0.4; ja-jp; SC-06D Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"; 29 30 @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.activity_main); 34 mTextView = (TextView)findViewById(R.id.TextView01); 35 36 Button btn = (Button) findViewById(R.id.Button01); 37 btn.setOnClickListener(new View.OnClickListener() { 38 39 @Override 40 public void onClick(View v) { 41 connect(); 42 } 43 }); 44 45 46 } 47 48 public void connect() { 49 50 new AsyncTask<Void, Void, String>() { 51 52 53 @Override 54 protected String doInBackground(Void... voids) { 55 try { 56 Socket socket = new Socket("10.0.33.13",4000); 57 OutputStream os = socket.getOutputStream(); 58 59 BufferedWriter bufwriter 60 = new BufferedWriter(new OutputStreamWriter( os ) ); 61 bufwriter.write("こんにちは"); 62 bufwriter.newLine(); 63 64 bufwriter.close(); 65 socket.close(); 66 67 } catch (IOException e) { 68 e.printStackTrace(); 69 } 70 return null; 71 } 72 }.execute(); 73 74 } 75 76 77 78} 79
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/27 11:22