質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1031閲覧

Android(クライアント)とPC(サーバー)でのSocket通信

Saito_FLLAA

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/07/04 22:00

初心者なので質問内容がおかしかったら申し訳ございません。
Android(クライアント)とPC(サーバー)でのSocket通信を目標にしています。
こちらのブログを参考にさせてもらい作成しているのですが、Android Studioのエミュレーターでは正常に動作するのですが実機で確認すると反応しなくて困っています。
実機で確認する場合には別にしないといけないことなどあるのでしょうか?お力を貸していただけると幸いです。

クライアント

Java

1import android.os.Bundle; 2import android.view.View; 3import android.widget.EditText; 4 5import androidx.appcompat.app.AppCompatActivity; 6 7import java.io.IOException; 8import java.io.PrintWriter; 9import java.net.Socket; 10import java.net.UnknownHostException; 11 12public class MainActivity extends AppCompatActivity { 13 /** Called when the activity is first created. */ 14 @Override 15 public void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 } 19 20 public void onButtonClick(View v){ 21 // ボタンを押したときのコード 22 Runnable sender = new Runnable() { 23 @Override 24 public void run() { 25 String address = 26 ((EditText) findViewById(R.id.txtIPAdress)).getText().toString(); 27 String strPort = 28 ((EditText) findViewById(R.id.txtPort)).getText().toString(); 29 int port = Integer.parseInt(strPort); 30 31 Socket socket = null; 32 33 try { 34 socket = new Socket(address, port); 35 PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); 36 37 String sendTxt = 38 ((EditText) findViewById(R.id.txtSend)).getText().toString(); 39 pw.println(sendTxt); 40 41 } catch (UnknownHostException e) { 42 e.printStackTrace(); 43 } catch (IOException e) { 44 e.printStackTrace(); 45 } 46 47 if (socket != null) { 48 try { 49 socket.close(); 50 socket = null; 51 } catch (IOException e) { 52 e.printStackTrace(); 53 } 54 } 55 } 56 }; 57 Thread th = new Thread(sender); 58 th.start(); 59 } 60}

サーバー

Java

1import java.io.BufferedReader; 2import java.io.InputStreamReader; 3import java.io.PrintWriter; 4import java.net.InetSocketAddress; 5import java.net.ServerSocket; 6import java.net.Socket; 7import java.io.IOException; 8import java.io.PrintWriter; 9import java.net.Socket; 10import java.net.UnknownHostException; 11 12public class TcpServerLesson { 13 14 static final int PORT = 54321; 15 16 /** 17 * @param args 18 */ 19 public static void main(String[] args) { 20 21 ServerSocket serverSocket = null; 22 23 try { 24 serverSocket = new ServerSocket(PORT); 25 26 boolean runFlag = true; 27 28 while(runFlag){ 29 30 System.out.println("start wait..."); 31 32 // 接続があるまでブロック 33 Socket socket = serverSocket.accept(); 34 35 BufferedReader br = 36 new BufferedReader( 37 new InputStreamReader(socket.getInputStream())); 38 39 String str; 40 while( (str = br.readLine()) != null ){ 41 System.out.println(str); 42 43 // exitという文字列を受け取ったら終了する 44 if( "exit".equals(str)){ 45 runFlag = false; 46 } 47 } 48 49 if( socket != null){ 50 socket.close(); 51 socket = null; 52 } 53 } 54 55 } catch (IOException e) { 56 e.printStackTrace(); 57 } 58 59 60 if( serverSocket != null){ 61 try { 62 serverSocket.close(); 63 serverSocket = null; 64 } catch (IOException e) { 65 e.printStackTrace(); 66 } 67 } 68 } 69 70}

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/07/05 01:40

> 初心者なので 初心者を自認される場合、初心者マーク(若葉マーク)が付けられるので、利用すると良いです。 参考にされているブログの記事は2011年と古く、現在のAndroid事情とは異なっています。 実機でもデバッグできるようにし、logcatなどでエラー(例外/Exception)が報告されているか確認してみてください。また、Android Studioや書いたプログラムのAndroidバージョンの対応状況、実機のAndroid端末のバージョンなども詳細に示した方が良いでしょう。(この欄ではなく、質問文中に追記、修正のかたちで示してください) 端的には、ネットワーク通信する場合は別スレッドで行う必要があります。 https://developer.android.com/training/basics/network-ops/connecting?hl=ja
hoshi-takanori

2021/07/05 22:09

IP アドレスはどんな値を指定していますか? また、PC のファイアウォール設定はどうなってますか?
Saito_FLLAA

2021/07/06 04:42 編集

hoshi-takanoriさん ファイアーウォール設定を見直すとすんなり動作しました。 ありがとうございました。
guest

回答1

0

自己解決

ファイアーウォール設定を見直すと動作しました。

投稿2021/07/06 04:44

Saito_FLLAA

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問