这里要封装通道流,封装键盘录入数据流。
同样地,还是两台电脑。一个客户端,一个服务器。
客户端代码:
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;/* * 客户端键盘录入,服务器输出到控制台 */public class ClientDemo { public static void main(String[] args) throws IOException { // 创建客户端Socket对象 Socket s = new Socket("192.168.1.105", 22222);//这里的地址是服务器端的IP地址和端口号 // 键盘录入数据 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 把通道内的流给包装一下 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( s.getOutputStream()));//在这里bw的功能相当于原来OutputStream os = s.getOutputStream;中的os String line = null; while ((line = br.readLine()) != null) { // 键盘录入数据要自定义结束标记,如果不定义则客户端永远不会停止下来。 if ("886".equals(line)) { break; } bw.write(line);//BufferedWriter封装字符流写入数据的时候,一定要带着换行才满足一行一行的写入。最后写完数据也不要忘记flush()保证数据的 写入 bw.newLine(); bw.flush(); } // 释放资源 // bw.close();//socket关闭了,(封装的)bw也会自动关闭所以不用谢bw.close(); // br.close();//键盘自定义录入结束了,已经没了键盘录入,所以br也早就关闭可以不写br.colse。这里是键盘录入封装起来的 s.close(); }}服务端代码:
package cn.itcast_08;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class ServerDemo { public static void main(String[] args) throws IOException { // 创建服务器Socket对象 ServerSocket ss = new ServerSocket(22222); // 监听客户端连接 Socket s = ss.accept(); // 包装通道内容的流 BufferedReader br = new BufferedReader(new InputStreamReader( s.getInputStream())); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } // br.close();//s关闭了br就跟着关闭了 s.close(); // ss.close();//服务器不用关闭 }}