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

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

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

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

Q&A

0回答

403閲覧

Javaを使ったサーバプログラム・クライアントプログラムで「localhost」以外だと接続されません。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

1クリップ

投稿2019/08/08 05:20

現在、簡単なサーバープログラムとクライアントプログラムを作って勉強しています。
そこで、問題が起きました。
それは、サーバーへ繋ぐクライアントプログラムが「localhost」または「自PCのローカルIP」でしか接続できないことです。

同じWi-Fiを使った「サーバー側プログラム」を実行させているPCのローカルIPを指定しても接続されません(タイムアウト)。
どなたかご教授ください。。

具体的なソースコードですが

サーバー側

Java

1package serverTest; 2 3import java.io.*; //InputStreamReaderやBufferedReaderを使えるようにする宣言 4import java.net.*; //InetAddressやSoket利用のため 5 6public class Server2 { 7 8 public static void main(String argv[]){ 9 InputStreamReader is = new InputStreamReader(System.in); 10 BufferedReader br = new BufferedReader(is); 11 byte crlf [] = {13,10};//キャリッジリターン(CR),改行(LF)の並び で、送信時の区切り用 12 13 14 try { 15 //サーバー接続 16 InetAddress local = InetAddress.getLocalHost();//このマシンの情報取得 17 String localAdr = local.getHostAddress(); 18 System.out.println("このマシンのIPアドレス" + localAdr); 19 20 //サーバー用ソケットをポート80で作成 21 ServerSocket serverSock = new ServerSocket(10001); 22 23 //クライアントからの接続を待ち、接続してきたら、 24 // そのクライアントと通信するソケットを取得する。 25 Socket clientSock = serverSock.accept(); 26 serverSock.close(); 27 28 //クライアントからのリクエストメッセージ送信情報を受信して表示 29 InputStream sok_in = clientSock.getInputStream(); 30 InputStreamReader sok_is = new InputStreamReader(sok_in); 31 BufferedReader sok_br = new BufferedReader(sok_is); 32 33 OutputStream os = clientSock.getOutputStream(); 34 35 while(true){ 36 String receive = sok_br.readLine();//受信データ取得 37 System.out.println("サーバー側で受け取りました" + receive); 38 receive = sok_br.readLine();//受信データ取得 39 System.out.println(receive); 40 System.out.print("「サーバーです」送信文字列>>"); 41 String send = br.readLine(); //キー1行入力 42 os.write(send.getBytes());//送信 43 os.write(crlf); 44 } 45 } 46 catch(Exception e){ 47 System.out.println(e.toString()); 48 } 49 System.out.print(" Enterキーで終了"); 50 try{System.in.read();}catch(Exception e){} 51 } 52}

クライアント側

Java

1package cliantTest; 2 3import java.io.*; //InputStreamReaderやBufferedReaderを使えるようにする宣言 4import java.net.*; //InetAddressやSoket利用のため 5 6public class Client2 { 7 8 public static void main(String argv[]){ 9 InputStreamReader is = new InputStreamReader(System.in); 10 BufferedReader br = new BufferedReader(is); 11 byte crlf [] = {13,10};//キャリッジリターン(CR),改行(LF)の並び で、送信時の区切り用 12 13 Socket socket;//ソケット 14 15 try { 16 //ここで、同じWi-Fiを使っている、上記の「サーバープログラム」が実行されている別のPCのローカルIPを指定しても、接続されません(タイムアウト)になります。 17 socket = new Socket( localhost , 10001); //接続 18 19 OutputStream os = socket.getOutputStream(); 20 21 InputStream sok_in = socket.getInputStream(); 22 InputStreamReader sok_isr = new InputStreamReader(sok_in); 23 BufferedReader sok_br = new BufferedReader(sok_isr); 24 25 while(true){ 26 System.out.print("「CLIANTです」送信文字列>>"); 27 String send = br.readLine(); //キー1行入力 28 os.write(send.getBytes());//送信 29 os.write(crlf); 30 os.write(crlf); 31 32 String receive = sok_br.readLine();//受信データ取得 33 System.out.println("「CLIANTです」サーバから受信『" + receive + "』"); 34 } 35 } 36 catch(Exception e){ 37 System.out.println(e.toString()); 38 } 39 System.out.print(" Enterキーで終了"); 40 try{System.in.read();}catch(Exception e){} 41 } 42}

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

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

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

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

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

m.ts10806

2019/08/08 05:28

相互にpingは通っているのでしょうか。
退会済みユーザー

退会済みユーザー

2019/08/08 05:57

localhost は未定義です。ってコンパイルエラーがでてるのかな
退会済みユーザー

退会済みユーザー

2019/08/08 06:04

コメントありがとうございます。 確認してみましたが、パソコンA→パソコンBはping OK 逆はNGでした。 おそらくネットワークの問題ですので、確認します
m.ts10806

2019/08/08 06:05

はい。相互に通ってないといけないと思いますので。
退会済みユーザー

退会済みユーザー

2019/08/08 06:24

m.ts10806 pingは拒否設定可能です。その場合返信もしません(タイムアウト)
sugar_yas

2019/08/08 08:33

OSがwindowsなら、windowsファイアウォールの設定でポート番号の送信受信の許可がないとか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問