現在、簡単なサーバープログラムとクライアントプログラムを作って勉強しています。
そこで、問題が起きました。
それは、サーバーへ繋ぐクライアントプログラムが「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}
あなたの回答
tips
プレビュー