私はandroidstudioでアプリ開発をしています。
ソケット通信をつかってmacからandroidに文字列を送信しようとしています。
#Mac側のコード
java
1import java.io.*; 2import java.net.*; 3import java.awt.*; 4import javax.swing.*; 5 6public class send { 7 8 9 10 public static void main(String[] args) { 11 try { 12 13 ServerSocket server = new ServerSocket(); 14 server.bind(new InetSocketAddress(4000)); 15 Socket socket = server.accept(); 16 OutputStream os = socket.getOutputStream(); 17 18 BufferedWriter bufwriter 19 = new BufferedWriter(new OutputStreamWriter( os ) ); 20 bufwriter.write("こんにちは"); 21 //bufwriter.newLine(); 22 bufwriter.close(); 23 socket.close(); 24 25 } catch (IOException e) { 26 e.printStackTrace(); 27 } 28 } 29}
#android側のコード
はじめにAndroidManifestの方に
<uses-permission android:name="android.permission.INTERNET"></uses-permission>を追加しました。
java
1import android.os.AsyncTask; 2import android.support.v7.app.AppCompatActivity; 3import android.os.Bundle; 4import android.view.View; 5import android.widget.*; 6import java.io.*; 7import java.net.*; 8 9public class MainActivity extends AppCompatActivity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 Button button = findViewById(R.id.button); 16 17 button.setOnClickListener(new View.OnClickListener() { 18 @Override 19 public void onClick(View view) { 20 21 connect(); 22 23 } 24 }); 25 } 26 27 28 public void connect() { 29 new AsyncTask<Void, Void, String>() { 30 31 32 @Override 33 protected String doInBackground(Void... voids) { 34 35 try { 36 Socket socket = new Socket("macのアドレス",4000); 37 38 BufferedReader reader = new BufferedReader( 39 new InputStreamReader(socket.getInputStream())); 40 41 String line; 42 line = reader.readLine(); 43 44 TextView textView = findViewById(R.id.text_view); 45 46 47 textView.setText(line); 48 49 50 51 52 }catch (IOException e) { 53 e.printStackTrace(); 54 } 55 56 return null; 57 } 58 }.execute(); 59 } 60} 61
AsyncTaskを使わないと強制終了してしまうので書き加えて実行しました。
androidでアプリを起動してボタンを押した後、mac側でjava sendをすると何もおきませんがもう一度ボタンを押すと「こんにちは」と表示されたと同時にアプリが終了してしまいます。
どこが間違っているのかわかる方がいましたらご教授ください
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/12/09 17:37