基本的なクライアントの動作は次のようになります。 なお、ストリームの説明は、ここをクリックください。
希望するサービスのサーバに、IPアドレスとポート番号で接続します。
それには、単に次のようなコンストラクタの実行で可能です。
この時、接続先IPアドレスの文字列の代わりにドメイン名も可能です
Socket socket = new Socket( IPアドレスの文字列 , ポート番号の数値 );
そして、次にサーバーへの送信用のストリーム(OutputStream)と、
受信用ストリーム(InputStream)を得ます。
サーバーと、アプリケーションプロトコルに従った、送信や受信を行います。
接続相手に送信する時は、
OutputStreamオブジェクト.write( バイト配列 )で行います。
また、1byteを受信する場合は、
InputStreamオブジェクト.read()の戻り値で得られます
なお、文字列受信ではbyte列⇔文字列の変換が必要となります。
ここで注意が必要なのは、通信相手の扱う文字列の
charsetが
何かということです。
日本語などで、これが合わないと文字化けが生じるからです。
通信が終わったら、socket.close() で接続を閉じなければなりません。
以下に 文字列を送受信できるサーバーに対して、接続し、
コンソール画面からキー入力した1行を送信して、
サーバーから1行受信してそれを表示し、
接続を閉じるプログラムを示します。
import java.io.*; //入出力(OutputStream,InputStream)用 import java.net.Socket;//ソケット用 public class TestTcpSendRec { public static void main(String []args)throws Exception { Socket socket = new Socket("192.168.0.33", 49152); OutputStream os = socket.getOutputStream();//送信用バイトストリーム取得 InputStream is = socket.getInputStream();//受信用バイトストリーム取得 System.out.println("キー入力>"); java.util.Scanner stdin = new java.util.Scanner(System.in);//キー入力用 String keyStr = stdin.nextLine();//1行キー入力文字列 //1行の keyStr文字列送信 byte[] data = keyStr.getBytes();//バイト列に変換(デフォルトのcharset) os.write(data); //接続相手にバイト出力 os.flush();//未出力データを、残らず出す。 //1行受信の処理 int c; byte [] buf = new byte[1028];//受信バイト列蓄え用 int n = 0; while (n < buf.length && (c = is.read()) != -1){//ストリーム終端で終了 if (c == 0x0A) break;// LF の改行なら終了 buf[n++] = (byte) c; } String recStr = new String(buf, 0, n, "Shift_JIS");//"Shift_JIS"のcharsetでbyte列から文字列変換 System.out.println("『" + recStr + "』の文字列受信"); //接続を閉じる os.close();//閉じる is.close(); socket.close(); } }