>ipconfig /allIPにはインターネットで利用できるグローバルIPとLAN内部(限定された範囲)でのみ利用できるローカルIPがあります。ローカルな IP には 192.168.0.* (*は任意、マスク 255.255.255.0)などがよく利用されます。また、127.0.0.1 は自分のIPとなります。
プロトコル | 内容 | ポート番号 |
FTP | ファイル送受信 | 22,23 |
DHCP | IP自動割付 | 67,68 |
HTTP | web | 80 |
smtp | メール送信 | 25 |
pop3 | メール取得 | 110 |
NTP | 時刻の取得 | 123 |
Date d ; d = new Date() ;d.toString() で日付と時刻の文字列を生成できます。WindowXP以後では、NTPサーバーによる時刻更新が自動的に行われます。
servsock = new ServerSocket(6000) ;次に、sock = servsock.accept() でクライアントからの接続を待ちます。接続がくるまで、このプログラムは「お休み状態」になります。接続があると、送受信用のデータソケット sock を受け取り、 out = sock.getOutputStream() ; で送信用のストリーム(ファイルの一種)を作成し、out.write( ) ; で文字を送信します。
String outstr ; outstr = "\n" + " this is time server." + "\n" + d.toString() + "\n"; int ln = outstr.length()
//timeServer.java // 接続があるとPC内部の時計の時刻を知らせるサーバプログラム // このプログラムはポート番号6000番で動作するTCPサーバです. // このプログラムを停止させるにはコントロールCを入力して下さい. //実行 java timeServer // ライブラリの利用 import java .io.* ; import java.net.* ; import java.util.* ; // クラスtimeServer class timeServer{ public static void main(String args[]){ ServerSocket servsock = null ;// サーバ用ソケット Socket sock ;// ソケットの読み書き用オブジェクト OutputStream out ;// 出力ストリーム String outstr ;// 出力データを格納する文字列 int i ; Date d ;// 日付時刻用オブジェクト System.out.println(" control C で終了"); try{ // サーバソケットの作成 servsock = new ServerSocket(6000) ; System.out.println(" サーバー socket 作成"); // サーバ処理の繰り返し while(true){ System.out.println("接続を待っています"); sock = servsock.accept() ;//接続処理 System.out.println("接続がありました"); // 出力用時刻データの作成 d = new Date() ; outstr = "\n" + " this is time server." + "\n" + d.toString() + "\n"; // データの出力 out = sock.getOutputStream() ; for(i = 0; i < outstr.length();++i) out.write((int)outstr.charAt(i)) ; out.write('\n') ; System.out.println("送信終了\n"); // 接続終了 sock.close() ; } }catch(IOException e){//エラー処理 System.exit(1) ; } } }
例 java timeClient サーバーIP番号 6000サーバーのIP番号とポート番号は、main(String[] args) の引数となり、args[0]にサーバーIP、args[1]にポート番号が渡ります。
readsocket = new Socket(args[0],Integer.parseInt(args[1])) ;//ソケット作成 instr = readsocket.getInputStream() ;//受信ストリーム作成 int n = instr.read(buff);//受信一定時間受信がないと、例外処理をうけ受信を終了します。最後にストリームとソケットと閉じます。
readsocket = new Socket(args[0],Integer.parseInt(args[1])) ;このとき、args[0] でコマンドから設定される IP 番号と、args[1] でポート番号を指定します。ソケットを作成すると、サーバーに対し接続要求が出ます。サーバーはこの要求を accept() で受け取ります。
//timeClient.java // タイムサーバからデータを受け取り,時刻を画面に出力します. // 実行 java timeClient サーバーIP番号 6000 //先にtimeServerを実行しておきます。 //ライブラリの利用 import java.io.*; import java.net.* ; //timeクライアント public class timeClient { // プログラムの本体 main public static void main(String[] args){ byte[] buff = new byte[1024];//配列の定義 Socket readsocket = null ;// サーバ接続用ソケット InputStream instr = null;// 読み取り用ストリーム boolean cont = true ; // 指定のポートに対応するソケットを作成し、接続要求を出す // args[0]はサーバーIP、args[1]はポート番号 try{ readsocket = new Socket(args[0],Integer.parseInt(args[1])) ; System.out.println(" クライアント socket 作成"); instr = readsocket.getInputStream() ; } catch(Exception e){ System.err.println("接続できません") ; System.exit(1) ; } System.out.println("接続成功"); while (cont) { try { // 読み込み int n = instr.read(buff); // System.outへの書き出し System.out.write(buff, 0, n) ; } // 以下は例外処理です、受信なく一定時間が経過すると例外処理が起こります、 catch(Exception e){ cont = false ;//受信終了 } } // コネクションを閉じます try{ instr.close() ; } catch(Exception e){ System.err.println("終了エラーです") ; System.exit(1) ; } } }
E:\java\prog3A>ipconfig Windows 2000 IP Configuration Ethernet adapter ローカル エリア接続 3: Connection-specific DNS Suffix . : aitai.ne.jp IP Address. . . . . . . . . . . . : 192.168.11.10 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.11.1
E:\java\prog3A>javac timeServer.java E:\java\prog3A>java timeServer control C で終了 サーバー socket 作成 接続を待っていますサーバーを終了するには control C を押します。
E:\java\prog3A>java timeClient 192.168.11.10 6000 クライアント socket 作成 接続成功 this is time server. Wed Jun 20 08:47:05 JST 2007このとき、サーバー側にもメッセージが表示されます。
E:\java\prog3A>java timeServer control C で終了 サーバー socket 作成 接続を待っています 接続がありました 送信終了
ping 192.168.11.20 ping www.yahoo.co.jp