- import java.net.*;
- import java.io.*;
- class UpperCaseClient
- {
- public static void main(String[] args) throws Exception
- {
- Socket s = new Socket(InetAddress.getLocalHost(), 10000);
- //定义源,读取键盘数据的流对象
- BufferedReader bufR =
- new BufferedReader(new InputStreamReader(System.in));
-
- //定义目的,将数据写入到socket输出流,发给服务端。
- //BufferedWriter bufOut =
- // new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
- PrintStream out = new PrintStream(s.getOutputStream());
-
- //定义一个socket读取流,读取服务端返回的大写信息
- BufferedReader bufIn =
- new BufferedReader(new InputStreamReader(s.getInputStream()));
- String line = null;
- String str = null;
- while((line = bufR.readLine()) != null)
- {
- //当客户端输入over时,循环结束,就会调用s.close()关闭客户端socket,这时服务端也会关闭,因为当关闭客户
- //端的socket时,会发送一个-1过去给服务端,服务端读到-1时循环也结束了,所以会执行s.close()和ss.close()
- if("over".equals(line))
- break;
-
- //用到了缓冲流,write后数据是写到缓冲中,应该把数据flush出去
- //.bufOut.write(line);
- //bufOut.newLine();//要加一个换行,不然服务端用readLine方法会一直等待结束标记
- //bufOut.flush();//要把数据刷出去,不然服务端读不到数据
- out.println(line);
-
- //读服务端的返回大写信息
- //readLine()是阻塞方法,它要等到一个回车标记才会结束。
- //用缓冲流写过来的时候,要加一个换行。newLine();而且要flush缓冲区,不然接收不到数据
- str = bufIn.readLine();
- System.out.println(str);
- }
- bufR.close();
- s.close();
-
-
- }
- }
- /*
- * 服务端
- * 源:socket读取流
- * 目的:socekt输出流
- * 都是文本,装饰
- */
- class UpperCaseServer
- {
- public static void main(String[] args) throws Exception
- {
- ServerSocket ss = new ServerSocket(10000);
-
- Socket s = ss.accept();
- String ip = s.getInetAddress().getHostAddress();
- System.out.println(ip + "....connect");
- //源,读取socket读取流中的数据
- BufferedReader bufIn =
- new BufferedReader(new InputStreamReader(s.getInputStream()));
-
- //目的,socket输出流,将大写数据写入到socket输出流,并发送给客户端
- //BufferedWriter bufOut =
- // new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
- PrintStream out = new PrintStream(s.getOutputStream());
-
- String line = null;
- //readLine()是阻塞方法,它要等到一个回车标记才会结束。
- //用缓冲流写过来的时候,要加一个换行。newLine();而且要flush缓冲区,不然接收不到数据
- while((line = bufIn.readLine()) != null)
- {
- //bufOut.write(line.toUpperCase());
- //bufOut.newLine();//要加一个换行,不然客户端用readLine方法会一直等待结束标记
- //bufOut.flush();//要把数据刷出去,不然客户端读不到数据
- out.println(line.toUpperCase());
- }
- s.close();
- ss.close();
- }
- }
复制代码 问题,不是说PrintStream要设置成自动刷新,也就是new PrintStream(***, true)这种形式才会自动刷新吗,为什么没有设置还是能自动刷呢
|