###解決したいこと
ソケット通信のプログラミングを、AndroidStudioにて終えました。
無事、ビルドもランもできています。
ただ、私、通信の知識に疎いので、これから通信に関して色々とお聞きしたいことがあります。
手始めとして、ソケット通信を2台のスマホで行うためには、IPアドレスと、ポート番号は何番を入力すればよいのでしょうか?
※ちなみに自前のWifiルータを使用していますが、携帯回線(wifiルータなし)でも通信できるのでしょうか?
[1]「設定」の歯車アイコンをタップ→無線とネットワークの項目から「Wi-Fi」をタップ→右上にある歯車アイコンをタップ→IPアドレス
[2]https://www.cman.jp/network/support/go_access.cgi
[1]で行って確認するIPアドレスと、[2]で行うIPアドレスが違うのですが、なぜなのでしょうか?
あと、実行すると、Runはできているが、通信失敗しました2というメッセージが表示されます。
通信失敗しました2というのはソースコードをご覧いただければ幸いです。
以下にソースコードを掲載します。//ここを教えてください というコメントが2点ございますので先の疑問点とともに指摘いただければ幸いです。
###ソースコード
java
1import android.app.Activity; 2import android.graphics.Color; 3import android.os.Bundle; 4import android.os.Handler; 5import android.view.View; 6import android.view.ViewGroup; 7import android.view.Window; 8import android.widget.Button; 9import android.widget.EditText; 10import android.widget.LinearLayout; 11import android.widget.TextView; 12 13import java.io.InputStream; 14import java.io.OutputStream; 15import java.net.Socket; 16 17//ソケット通信 18public class MainActivity extends Activity 19 implements View.OnClickListener{ 20 private final static String BR = System.getProperty("line.separator"); 21 private final static int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 22 private final static int MP = ViewGroup.LayoutParams.MATCH_PARENT; 23 24 //IPアドレスの指定 25 private final static String IP = "000.000.000.000";//変更必須 26 27 private TextView lblReceive; //受信ラベル 28 private EditText edtSend; //送信エディットテキスト 29 private Button btnSend; //送信ボタン 30 31 private Socket socket ; //ソケット 32 private InputStream in; //入力ストリーム 33 private OutputStream out; //出力ストリーム 34 private boolean error; //エラー 35 36 private final Handler handler = new Handler();//ハンドラ 37 38 //アクティビティ起動時に呼ばれる 39 @Override 40 public void onCreate(Bundle bundle) { 41 super.onCreate(bundle); 42 requestWindowFeature(Window.FEATURE_NO_TITLE); 43 44 //レイアウトの生成 45 LinearLayout layout = new LinearLayout(this); 46 layout.setBackgroundColor(Color.BLACK); 47 layout.setOrientation(LinearLayout.VERTICAL); 48 setContentView(layout); 49 50 //送信エディトテキストの生成 51 edtSend = new EditText(this) ; 52 edtSend.setText(""); 53 edtSend.setOnClickListener(this); 54 layout.addView(edtSend); 55 56 //送信ボタンの生成 57 btnSend = new Button(this) ; 58 btnSend.setText("送信"); 59 btnSend.setOnClickListener(this); 60 layout.addView(btnSend); 61 62 //受信ラベルの生成 63 lblReceive = new TextView(this); 64 lblReceive.setText(""); 65 lblReceive.setTextSize(20.0f); 66 lblReceive.setTextColor(Color.BLUE); 67 lblReceive.setLayoutParams(new LinearLayout.LayoutParams(MP,WC)); 68 layout.addView(lblReceive); 69 } 70 //アクティビティ開始時に呼ばれる 71 @Override 72 public void onStart() { 73 super.onStart(); 74 75 //スレッドの生成 76 Thread thread = new Thread(){ 77 public void run() { 78 try { 79 connect(IP, 8081); 80 } catch (Exception e) { 81 } 82 } 83 }; 84 thread.start(); 85 } 86 87 //アクティビティの停止時に呼ばれる 88 @Override 89 public void onStop(){ 90 super.onStop(); 91 disconnect(); 92 } 93 //受信テキストの追加 94 private void addText(final String text) { 95 //ハンドラの生成 96 handler.post(new Runnable(){ 97 public void run() { 98 lblReceive.setText(text+BR+lblReceive.getText()); 99 } 100 }); 101 } 102 103 // 接続 104 private void connect(String ip, int port) { 105 int size ; 106 String str ; 107 byte[] w = new byte[1024] ; 108 try{ 109 //ソケット通信 110 addText("接続中"); 111 socket = new Socket(ip, port) ; 112 in = socket.getInputStream() ; 113 out = socket.getOutputStream(); 114 addText("接続完了"); 115 116 //受信ループ 117 while (socket != null && socket.isConnected()) { 118 //データの受信 119 size = in.read(w); 120 if (size <= 0) continue ; 121 str = new String(w, 0, size, "UTF-8"); 122 123 //ラベルへの文字追加 124 addText("通信失敗しました1"); 125 } 126 } catch (Exception e) { 127 addText("通信失敗しました2"); 128 } 129 } 130 131 //切断 132 private void disconnect() { 133 try { 134 socket.close(); 135 socket = null ; 136 } catch (Exception e) { 137 } 138 } 139 140 //ボタンクリックイベントの処理 141 public void onClick(View v) { 142 //スレッドの生成 143 Thread thread = new Thread(new Runnable() {public void run(){ 144 error = false ; 145 try { 146 //データの送信 147 if (socket != null && socket.isConnected()){ 148 byte[] w = edtSend.getText().toString().getBytes("UTF8"); 149 out.write(w) ; 150 out.flush(); 151 } 152 } catch (Exception e) { 153 error = true ; 154 } 155 //ハンドラの生成 156 handler.post(new Runnable(){ public void run(){ 157 if(!error){ 158 edtSend.setText(""); 159 } else { 160 addText("通信失敗しました3"); 161 } 162 }}); 163 }}); 164 thread.start(); 165 } 166}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/16 10:51 編集
2018/10/16 10:51
2018/10/16 10:55
2018/10/16 10:57
2018/10/16 11:11
2018/10/16 11:14
2018/10/16 11:17
2018/10/16 11:20
2018/10/16 12:14
2018/10/16 12:15
2018/10/16 12:16
2018/10/20 04:09
2018/10/20 07:14
2018/10/24 06:46