Javaを使ったサーバーとクライアントプログラム

サーバーはIPアドレスとポート番号の情報で、クライアントからの待ち受け準備をします

クライアントでは、このサーバーのIPアドレスと、ポート番号に接続します
つまり、クライアントは接続したいソフトのポート番号が分からないと接続できないことになります。

サーバーでは、クライアントから接続を受け入れ(accept)する時、 そのクライアントと通信するための新しいソケットを作ります。

クライアントでは、サーバーが接続を受け入れした段階でより、通信が可能になります。

下記プログラムでは、接続後にクライアント側でキー入力した文字列を、サーバーに送信します。
この時、メッセージ送信を終える区切として、 CR(Carriage Return : 行頭復帰)、LF(Line Feed : 改行)コードを続けて2回送信しています。

サーバーでは、クライアントより受信した文字列にを表示した後、
キー入力した文字列を、クライアントに送信します。

クライアントでは、サーバーよりメッセージを受信し、その内容を表示した後で、 再びキー入力した文字列をサーバーに送信する繰り返しです。

以上のやり取りを行うサーバーとクライアントのプログラムを下記に示します。

サーバーのプログラム ファイル名:Server2.java

import java.io.*;	//InputStreamReaderやBufferedReaderを使えるようにする宣言
import java.net.*;	//InetAddressやSoket利用のため

public class Server2 {

	public static void main(String argv[]){
		InputStreamReader is = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(is);
		byte crlf [] = {13,10};//キャリッジリターン(CR),改行(LF)の並び で、送信時の区切り用


		try {
			//サーバー接続
			InetAddress local = InetAddress.getLocalHost();//このマシンの情報取得
			String localAdr = local.getHostAddress();
			System.out.println("このマシンのIPアドレス" + localAdr);	
			
			//サーバー用ソケットをポート80で作成
			ServerSocket serverSock = new ServerSocket(80); 

			//クライアントからの接続を待ち、接続してきたら、
			//	そのクライアントと通信するソケットを取得する。
			Socket clientSock = serverSock.accept();
			serverSock.close();
			
			//クライアントからのリクエストメッセージ送信情報を受信して表示
			InputStream sok_in = clientSock.getInputStream();
			InputStreamReader sok_is = new InputStreamReader(sok_in);
			BufferedReader sok_br = new BufferedReader(sok_is);
			
			OutputStream os = clientSock.getOutputStream();
			
			while(true){ 
				String receive =  sok_br.readLine();//受信データ取得
				System.out.println(receive);
				receive =  sok_br.readLine();//受信データ取得
				System.out.println(receive);
				System.out.print("送信文字列>>");
				String send = br.readLine();	//キー1行入力
				os.write(send.getBytes());//送信
				os.write(crlf);
			}
		}
		catch(Exception e){
			System.out.println(e.toString());
		}
		System.out.print("  Enterキーで終了");
		try{System.in.read();}catch(Exception e){}
	}
}

クライアントのプログラム ファイル名:Client2.java

import java.io.*;	//InputStreamReaderやBufferedReaderを使えるようにする宣言
import java.net.*;		//InetAddressやSoket利用のため

public class Client2  {

	public static void main(String argv[]){
		InputStreamReader is = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(is);
		byte crlf [] = {13,10};//キャリッジリターン(CR),改行(LF)の並び で、送信時の区切り用

		Socket socket;//ソケット
		
		try {
			System.out.print("接続するサーバーのIPアドレス入力>"); //追加
			String IPAddress = br.readLine(); //キー1行入力
			socket = new Socket( IPAddress ,  80); //接続

			OutputStream os = socket.getOutputStream();
			
			InputStream sok_in = socket.getInputStream();
			InputStreamReader sok_isr = new InputStreamReader(sok_in);
			BufferedReader sok_br = new BufferedReader(sok_isr);

			while(true){
				System.out.print("送信文字列>>");
				String send = br.readLine();	//キー1行入力
				os.write(send.getBytes());//送信
				os.write(crlf);
				os.write(crlf);
				
				String receive = sok_br.readLine();//受信データ取得
				System.out.println("受信『" + receive + "』");
			}
		}
		catch(Exception e){
			System.out.println(e.toString());
		}
		System.out.print("  Enterキーで終了");
		try{System.in.read();}catch(Exception e){}
	}
}