输入一个东东、返回这个东东的大写并输出。
import java.io.*; import java.net.*; public class SocketLearning { public static void main(String[] args) throws Exception { new Thread(new TransClient()).start(); new Thread(new TransServer()).start(); // System.out.println(InetAddress.getLocalHost().getHostAddress()); } } class TransClient implements Runnable { public void run() { try { mymethod(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void mymethod() throws Exception { Socket s = new Socket("199.234.8.31",10022); //定义读取键盘数据的流对象。 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //定义目的,将数据写入到socket输出流 、发给服务端。 BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); // PrintWriter out = new PrintWriter(s.getOutputStream(),true); //定义一个socket读取流、读取服务端返回的大写信息。 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=bufr.readLine())!=null) { if("over".contentEquals(line)) break; // out.println(line); //在这里用了 printWriter 代替了 bufferedWriter、 这一句话 代替了下面的三句话。 bufOut.write(line); bufOut.newLine(); bufOut.flush(); String str = bufIn.readLine(); System.out.println("Server::"+str); } bufr.close(); s.close(); } } /* * 服务端: 源:socket读取流、 目的:socket输出流。 都是文本、装饰一下 */ class TransServer implements Runnable { public void run() { try { mymethod(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void mymethod() throws Exception { ServerSocket ss = new ServerSocket(10022); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); // 源:读取socket中的数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //目的:socket 输出流、将大写数据写入到socket输出流、并发送给客户端。 BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line = null; while((line=bufIn.readLine())!=null) { bufOut.write(line.toUpperCase()); bufOut.newLine(); bufOut.flush(); } s.close(); ss.close(); } } /* 该例子出现的问题 : 现象: 客户端和服务端都在莫名的等待 。 为什么呢? 因为客户端和服务端都有阻塞式方法。这些方法没有读到结束标记,就会一直等,而导致两段都在等待。而导致两段都在等待 */