/*
需求:建立一个文本转换服务器
客户给服务端发送文本,服务端会将文本转成大写的然后返回给客户端
而且客户端可以不断的进行文本转换,当客户端输入 over 时,转换结束
分析:
客户端:
既然是操作设备上的数据,那么就可以使用 io 技术
*/
import java.net.*;
import java.io.*;
class TransClient { //客户端
public static void main(String[] args) throws Exception {
Socket s = new Socket("172.16.41.154", 10003);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
//从键盘获取数据
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter skBufw = new BufferedWriter(new OutputStreamWriter(out));
BufferedReader skBufr = new BufferedReader(new InputStreamReader(in));
String info = null;
while((info = bufr.readLine()) != null) {
if("over".equals(info))
break;
skBufw.write(info);
skBufw.newLine();
skBufw.flush();
String str = skBufr.readLine();
System.out.println("服务端转为大写后 " + str);
}
bufr.close();
s.close();
}
}
class TransSever { //服务端
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10003);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "....connecting");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
BufferedReader skBufr = new BufferedReader(new InputStreamReader(in));
BufferedWriter skBufw = new BufferedWriter(new OutputStreamWriter(out));
String info = null;
while((info = skBufr.readLine()) != null) {
System.out.println(info);
skBufw.write(info.toUpperCase());
skBufw.newLine();
skBufw.flush();
}
}
}
/*
该例子出现的问题:
现象:客户端合服务端都在莫名的等待
为什么呢?
因为客户端和服务端都有阻塞式方法,这些方法没有读到结束标记,那么就一直等待,而导致两端都在等待
*/