>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