public static class hiSocket.TCP.ForText extends Object implements AutoCloseable
socketに結びついたBufferedReaderとPrintWriterを持ちテキストの送受信を行います。
電文路上の文字セットを考慮したテキストの送受信に使います。
データ送受信用socketであり、クライアント側でもサーバ側でも使用します。
クライアント側での接続はconnect(String,int,int)
で行います。
サーバ側での接続はjava標準のjava.net.ServerSocket
を用い、
connect(ServerSocket,int)
で行います。
PrintWriterの各種printメソッドとBufferedReaderのreadLineメソッド
をこのクラスで用意してあり、それらを用いて送受信します。
PrintWriterは通信という性格上自動flushモードとなります。printlnまたは
改行コードの送信時にflushします。
public変数br
とpw
を持ちます。
brがBufferedReaderでpwがPrintWriterとなります。
何れもconnect時に接続socketから作成されます。
本クラスのメソッドを用いずbr,pwを使ってもかまいません。
例えば次のようにデータの送受信ができます。
// サーバー側
import otsu.hiNote.*;
import java.net.*;
public class TestS {
final static int default_port=5963;
final static int time_out =60000;//60秒
public static void main(String[] args_){
try{
ServerSocket
con = new ServerSocket(hiU.atoi(args_[0],default_port));
ForText sock= new hiSocket.TCP.ForText(con,time_out);
for(int i=0;i<5;++i){
sock.printf("abc-%d%n",i);
String line;
if( (line=sock.readLine())==null ) break;
System.out.println("S received data="+line);
}
sock.close();
}
catch(Exception e){
e.printStackTrace(hiU.err);
System.exit(1);
}
}
}
// クライアント側
import otsu.hiNote.*;
public class TestC {
final static int default_port=5963;
final static int time_out =60000;//60秒
public static void main(String[] args_){
try{
ForText sock
= new hiSocket.TCP.ForText("localhost",hiU.atoi(args_[0],default_port),time_out);
String line;
int n=0;
while( (line=sock.readLine())!=null ){
System.out.println("C received data="+line);
sock.printf("xyz-%d%n",++n);
}
sock.close();
}
catch(Exception e){
e.printStackTrace(hiU.err);
System.exit(1);
}
}
}
// 実行
java TestS 5006
java TestC 5006
// 出力
クライアント側
C received data=abc-0
C received data=abc-1
C received data=abc-2
C received data=abc-3
C received data=abc-4
サーバ側
S received data=xyz-1
S received data=xyz-2
S received data=xyz-3
S received data=xyz-4
S received data=xyz-5
// 補足
hiU.atoi(args[0],default_port)
はデフォルト値を持つintの文字列解析です。
シリアライズ可能なクラスオブジェクトを送受信する通信機
ForObject<T>
と
バイナリデータを送受信するための通信機hiSocket.TCP
が
別途用意されています。
なお、format(),printf()がPrintWriterを返すにも関わらずprintln()やwrite()の戻りがvoidであるという不自然な仕様はjava.io.PrintWriterの仕様に従ったものです。
修飾子とタイプ | フィールドと説明 |
---|---|
BufferedReader |
br
関連づけられた受信用BufferedReader
|
PrintWriter |
pw
socketに関連付けられた送信用PrintWriter
|
Socket |
socket
接続されたsocket
|
コンストラクタと説明 |
---|
ForText()
接続されていない状態のインスタンスを作る.
|
ForText(ServerSocket con_,
int timeout_)
サーバ側でコネクトする(utf-8).
|
ForText(ServerSocket con_,
int timeout_,
String charSet_)
サーバ側でコネクトする(文字セット指定).
|
ForText(String serverName_,
int serverPort_,
int timeout_)
クライアント側でコネクトする(utf-8).
|
ForText(String serverName_,
int serverPort_,
int timeout_,
String charSet_)
クライアント側でコネクトする(文字セット指定).
|
修飾子とタイプ | メソッドと説明 |
---|---|
PrintWriter |
append(char c_)
1文字送信する
|
PrintWriter |
append(CharSequence csq_)
文字並びを送信する
|
PrintWriter |
append(CharSequence csq_,
int sta_,
int end_)
指定文字並びを送信する
|
void |
close()
socketおよびstreamをcloseする(exceptionはない)
|
void |
connect(ServerSocket con_,
int timeout_)
サーバ側でコネクトする.
|
void |
connect(ServerSocket con_,
int timeout_,
String charSet_)
サーバ側でコネクトする.
|
void |
connect(String serverName_,
int serverPort_,
int timeout_)
クライアント側でコネクトする(utf-8).
|
void |
connect(String serverName_,
int serverPort_,
int timeout_,
String charSet_)
クライアント側でコネクトする(文字セット指定).
|
void |
flush()
出力をフラッシュする
|
PrintWriter |
format(Locale l_,
String format_,
Object... args_)
指定フォーマットで文字列を送信する.
|
PrintWriter |
format(String format_,
Object... args_)
指定フォーマットで文字列を送信する.
|
static hiSocket.TCP.ForText |
newSocket()
接続されていない状態のインスタンスを作る.
|
static hiSocket.TCP.ForText |
newSocket(ServerSocket con_,
int timeout_)
サーバ側でコネクトする(utf-8).
|
static hiSocket.TCP.ForText |
newSocket(ServerSocket con_,
int timeout_,
String charSet_)
サーバ側でコネクトする(文字セット指定).
|
static hiSocket.TCP.ForText |
newSocket(String serverName_,
int serverPort_,
int timeout_)
クライアント側でコネクトする(utf-8).
|
static hiSocket.TCP.ForText |
newSocket(String serverName_,
int serverPort_,
int timeout_,
String charSet_)
クライアント側でコネクトする(文字セット指定).
|
void |
print(boolean val_)
指定データの文字列表現を送信する
|
void |
print(char val_)
* 指定文字を送信する
|
void |
print(char[] val_)
* 指定データの文字列表現を送信する
|
void |
print(double val_)
* 指定データの文字列表現を送信する
|
void |
print(float val_)
* 指定データの文字列表現を送信する
|
void |
print(int val_)
* 指定データの文字列表現を送信する
|
void |
print(long val_)
* 指定データの文字列表現を送信する
|
void |
print(Object val_)
* 指定データの文字列表現を送信する
|
void |
print(String val_)
* 指定データの文字列表現を送信する
|
PrintWriter |
printf(Locale l_,
String format_,
Object... args_)
指定フォーマットで文字列を送信する.
|
PrintWriter |
printf(String format_,
Object... args_)
指定フォーマットで文字列を送信する.
|
void |
println()
改行コードを送信する
|
void |
println(boolean val_)
指定データの文字列表現を改行コードを付加して送信する
|
void |
println(char val_)
指定文字を改行コードを付加して送信する
|
void |
println(char[] val_)
指定字列ならびを改行コードを付加して送信する
|
void |
println(double val_)
指定字列ならびを改行コードを付加して送信する
|
void |
println(float val_)
指定字列ならびを改行コードを付加して送信する
|
void |
println(int val_)
指定字列ならびを改行コードを付加して送信する
|
void |
println(long val_)
指定字列ならびを改行コードを付加して送信する
|
void |
println(Object val_)
指定字列ならびを改行コードを付加して送信する
|
void |
println(String val_)
指定字列ならびを改行コードを付加して送信する
|
int |
read()
1文字読み込む.
|
int |
read(char[] cbuf_,
int off_,
int len_)
指定文字数読み込む.
|
String |
readLine()
1行読み込む.
|
boolean |
ready()
読み込み可能かチェックする
|
void |
set_timeout(int timeout_)
socketのso-timeout値をセットします。
|
long |
skip(long n_)
指定文字数スキップする
|
void |
write(int byte_)
指定字列ならびを改行コードを付加して送信する
|
public Socket socket
public BufferedReader br
public PrintWriter pw
public ForText()
public ForText(String serverName_, int serverPort_, int timeout_)
int port= 5004; hiSocket.ForText sock= new hiSocket.ForText("host1",port,60000);
serverName_
- サーバー側名前serverPort_
- ポート側のポートtimeout_
- タイムアウトミリ秒(ただし1000ミリ代のみ見る)RuntimeException
- IOException
をcauseとして持つ。public ForText(String serverName_, int serverPort_, int timeout_, String charSet_)
int port= 5004; hiSocket.ForText sock= new hiSocket.ForText("host1",port,60000,"shift-jis");
serverName_
- サーバー側名前serverPort_
- ポート側のポートtimeout_
- タイムアウトミリ秒(ただし1000ミリ代のみ見る)charSet_
- 文字コードRuntimeException
- IOException
をcauseとして持つ。public ForText(ServerSocket con_, int timeout_)
サーバ側でソケットのコネクトをします。
PrintWriterは自動フラッシュとなります。printlnまたは
改行コードの送信時にflushします。
int port= 5004; ServerSocket con = new ServerSocket(port); hiSocket.ForText sock= new hiSocket.ForText(con,60);
con_
- サーバのコネクトポイントtimeout_
- タイムアウト時間(ミリ秒)RuntimeException
- IOException
をcauseとして持つ。public ForText(ServerSocket con_, int timeout_, String charSet_)
サーバ側でソケットのコネクトをします。
int port= 5004; ServerSocket con = new ServerSocket(port); hiSocket.ForText sock= new hiSocket.ForText(con,60,"shift-jis");
con_
- サーバのコネクトポイントtimeout_
- タイムアウト時間(ミリ秒)charSet_
- 文字コード指定RuntimeException
- IOException
をcauseとして持つ。public static hiSocket.TCP.ForText newSocket()
public void connect(String serverName_, int serverPort_, int timeout_)
int port= 5004; hiSocket.ForText sock= new hiSocket.ForText() sock.connect("host1",port,60000);
serverName_
- サーバー側名前serverPort_
- ポート側のポートtimeout_
- タイムアウトミリ秒(ただし1000ミリ代のみ見る)RuntimeException
- IOException
をcauseとして持つ。public static hiSocket.TCP.ForText newSocket(String serverName_, int serverPort_, int timeout_)
int port= 5004; hiSocket.ForText sock= new hiSocket.ForText("host1",port,60000);
serverName_
- サーバー側名前serverPort_
- ポート側のポートtimeout_
- タイムアウトミリ秒(ただし1000ミリ代のみ見る)RuntimeException
- IOException
をcauseとして持つ。public void connect(String serverName_, int serverPort_, int timeout_, String charSet_)
int port= 5004; hiSocket.ForText sock= new hiSocket.ForText(); sock.connect("host1",port,60000,"shift-jis");
serverName_
- サーバー側名前serverPort_
- ポート側のポートtimeout_
- タイムアウトミリ秒(ただし1000ミリ代のみ見る)charSet_
- 文字コードセットRuntimeException
- IOException
をcauseとして持つ。public static hiSocket.TCP.ForText newSocket(String serverName_, int serverPort_, int timeout_, String charSet_)
int port= 5004; hiSocket.ForText sock= hiSocket.ForText.newSocket("host1",port,60000,"shift-jis");
serverName_
- サーバー側名前serverPort_
- ポート側のポートtimeout_
- タイムアウトミリ秒(ただし1000ミリ代のみ見る)charSet_
- 文字コードRuntimeException
- IOException
をcauseとして持つ。public static hiSocket.TCP.ForText newSocket(ServerSocket con_, int timeout_)
サーバ側でソケットのコネクトをします。
PrintWriterは自動フラッシュとなります。printlnまたは
改行コードの送信時にflushします。
int port= 5004; ServerSocket con = new ServerSocket(port); hiSocket.ForText sock= hiSocket.ForText.newSocket(con,60);
con_
- サーバのコネクトポイントtimeout_
- タイムアウト時間(ミリ秒)RuntimeException
- IOException
をcauseとして持つ。public void connect(ServerSocket con_, int timeout_)
サーバ側でソケットのコネクトをします。
PrintWriterは自動フラッシュとなります。printlnまたは
改行コードの送信時にflushします。
int port= 5004; ServerSocket con = new ServerSocket(port); hiSocket.ForText sock= new hiSocket.ForText(); sock.connect(con,60);
con_
- サーバのコネクトポイントtimeout_
- タイムアウト時間(ミリ秒)RuntimeException
- IOException
をcauseとして持つ。public static hiSocket.TCP.ForText newSocket(ServerSocket con_, int timeout_, String charSet_)
サーバ側でソケットのコネクトをします。
int port= 5004; ServerSocket con = new ServerSocket(port); hiSocket.ForText sock= hiSocket.ForText.newSocket(con,60,"shift-jis");
con_
- サーバのコネクトポイントtimeout_
- タイムアウト時間(ミリ秒)charSet_
- 文字コード指定RuntimeException
- IOException
をcauseとして持つ。public void connect(ServerSocket con_, int timeout_, String charSet_)
サーバ側でソケットのコネクトをします。
PrintWriterは自動flushとなります。printlnまたは
改行コードの送信時にflushします。
int port= 5004; ServerSocket con = new ServerSocket(port); ForText sock= new ForText(); sock.connect(con,60,"shift-ji");
con_
- サーバのコネクトポイントtimeout_
- タイムアウト時間(ミリ秒)charSet_
- 文字コード指定RuntimeException
- IOException
をcauseとして持つ。public void close()
close
インタフェース内 AutoCloseable
public void set_timeout(int timeout_)
soTimeoutをセットします。
次の操作を行います。
socket.setSoTimeout(timeout_);
timeout_
- タイムアウト時間(ミリ秒)public PrintWriter append(char c_)
c_
- 送信する文字public PrintWriter append(CharSequence csq_)
csq_
- 送信する文字並びpublic PrintWriter append(CharSequence csq_, int sta_, int end_)
csq_
- 送信する文字並びsta_
- 文字並び上の開始位置end_
- 文字並び上の終了位置(この位置の文字は含まない)public PrintWriter format(Locale l_, String format_, Object... args_)
l_
- ロケールformat_
- フォーマットargs_
- 引数群printf(String,Object...)
と同じですpublic PrintWriter format(String format_, Object... args_)
format_
- フォーマットargs_
- 引数群printf(String,Object...)
と同じです。public void print(boolean val_)
val_
- 送信するデータpublic void print(char val_)
val_
- 送信するデータpublic void print(char[] val_)
val_
- 送信するデータpublic void print(double val_)
val_
- 送信するデータpublic void print(float val_)
val_
- 送信するデータpublic void print(int val_)
val_
- 送信するデータpublic void print(long val_)
val_
- 送信するデータpublic void print(Object val_)
val_
- 送信するデータpublic void print(String val_)
val_
- 送信するデータpublic PrintWriter printf(Locale l_, String format_, Object... args_)
ロケールは例えば次のように作成します。ただし混乱を生じさせるだけの無意味な指定ですので使うべきではありません。
Locale jp = new Locale("ja","JP"); //日本のロケールを生成 Locale us = new Locale("en","US"); //アメリカのロケールを生
l_
- ロケールformat_
- フォーマットargs_
- 引数並びpublic PrintWriter printf(String format_, Object... args_)
format_
- フォーマットargs_
- 引数並びpublic void println()
public void println(boolean val_)
val_
- 送信するデータpublic void println(char val_)
val_
- 送信するデータpublic void println(char[] val_)
val_
- 送信するデータpublic void println(double val_)
val_
- 送信するデータpublic void println(float val_)
val_
- 送信するデータpublic void println(int val_)
val_
- 送信するデータpublic void println(long val_)
val_
- 送信するデータpublic void println(Object val_)
val_
- 送信するデータpublic void println(String val_)
val_
- 送信するデータpublic void write(int byte_)
byte_
- 送信するデータpublic void flush()
public int read()
戻り値の型はcharではなくintですが、内容はchar相当です。
EOFまたはオープンされていない状態では-1が戻ります。
RuntimeException
- IOException
をcauseとして持つ。public int read(char[] cbuf_, int off_, int len_)
指定文字数読み込むまで、あるいはEOFに達するまでブロックします。 *
cbuf_
- バッファoff_
- オフセットlen_
- 長さRuntimeException
- IOException
をcauseとして持つ。public String readLine()
テキストを1行読み込みます。行の終わりは改行('\n')か復帰('\r')
あるいは復帰改行で認識されます。
EOFまたはオープンされていな状態ではnullが返ります。
RuntimeException
- IOException
をcauseとして持つ。public boolean ready()
RuntimeException
- IOException
をcauseとして持つ。public long skip(long n_)
n_
- スキップする文字数