Socketプログラミングは、IOストリームを使用する上で注意すべき点です.
ソケットプログラミングでは、常にソケット接続後を作成します.InputStreamとOutputStreamを取得し、データの読み込みや書き込みを容易にするためにさらに包装します.ただし、ストリームの使用が間違っていると、データが読み込めなくなる場合があります.
以下はBufferedWriterとPrintWriterを使う際の注意点です.
1.BufferedReaderとBufferedWriterを使う
BufferedReaderとBufferedWriterを使って一回のデータを読み込みますかます書き込むならば、必ずプラスして、1行の終わりを表します.そうでないと、BufferedReaderはデータを読めません.
やはりBufferedReaderを使って一度に1行のデータを読み、データを書くのはPrintWriterのprintln()の方法です.また、PrintWriterを構築する際に、atoFush=trueを設定します.
以下はBufferedWriterとPrintWriterを使う際の注意点です.
1.BufferedReaderとBufferedWriterを使う
BufferedReaderとBufferedWriterを使って一回のデータを読み込みますかます書き込むならば、必ずプラスして、1行の終わりを表します.そうでないと、BufferedReaderはデータを読めません.
BufferedReader br = null;
BufferedWriter pw = null;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while (true) {
String input = br.readLine();
if (null == input) {
break;
}
System.out.println(" :" + input);
if ("Server Time".equalsIgnoreCase(input)) {
// : BufferedWriter,
, BufferedReader readLine() 。
pw.write((new Date()).toString()+"
");
pw.flush();
}
}
} catch (IOException e) {
System.out.println("ip:" + socket.getInetAddress().getHostAddress() + " I/O ");
}
2.BufferedReaderとPrintWriterを使用するやはりBufferedReaderを使って一度に1行のデータを読み、データを書くのはPrintWriterのprintln()の方法です.また、PrintWriterを構築する際に、atoFush=trueを設定します.
socket = new Socket(host,port);
in = socket.getInputStream();
out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out),true); // autoFlush=true
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println(" ");
pw.println("Server Time"); // println , write()
String response = br.readLine();
System.out.println("response:" + response);