/*需求:
* 建立一个文本转换服务器
* 客户端给服务器端发送文本,服务器段会将文本转换成大写再返回给客户端。
* 而且客户端可以不断的进行文本转换。当客户端输入over时,转换结束
*
* 分析:
* 客户端:
* 既然是操作设备上的数据,那么就可以用io技术,并按照io的操作规律来思考。
* 源:键盘录入
* 目的:网络设备,网络输出流
* 而且操作的是文本数据,可以选择字符流。
*
* 都是文本数据,可以使用字符流操作数据,同时加入缓冲。
*/
package test.itheima;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpDemo3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
class TcpClient3 {
public static void main(String[] args) throws UnknownHostException,
IOException {
// 1.create socket object and set the IP&port
Socket s = new Socket("127.0.0.1", 10000);
// 2.Create read buffer and read from the keyboard.
BufferedReader inKeyboard = new BufferedReader(new InputStreamReader(
System.in));
// 3.Create output for the server
BufferedWriter toServer = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));
// 4.Create input from server
BufferedReader fromServer = new BufferedReader(new InputStreamReader(
s.getInputStream()));
String line = null;
while ((line = inKeyboard.readLine()) != null) {
if ("over".equals(line))
break;
toServer.write(line);
toServer.newLine();
toServer.flush();
String str=fromServer.readLine();
System.out.println("server:"+str);
}
s.close();
inKeyboard.close();
}
}
class TcpServer3{
public static void main(String[] args) throws UnknownHostException,IOException{
//1.create ServerSocket
ServerSocket ss=new ServerSocket(10000);
//2.get socket
Socket s=ss.accept();
//3.get the ip from client
String ip=s.getInetAddress().getHostAddress();
System.out.println("Client:"+ip);
//4.get the string from client.
BufferedReader bFromClient=new BufferedReader(new InputStreamReader(s.getInputStream()));
//5.send back the string to client.
BufferedWriter bToClient=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
System.out.println(bToClient);
String line=null;
while((line=bFromClient.readLine())!=null){
bToClient.write(line.toUpperCase());
/**************** 一定注意下面的两条语句******************/
bToClient.newLine();
bToClient.flush();
/*该例出现的问题.:
* 现象:客户端和服务器端都在莫名的等待.
* why?
* 因为客户端和服务器端都有阻塞式方法,这些方法没有读到结束标记.就会一直等.
*/
}
//6.close resources
s.close();
}
}
[黑马程序员]tcpdemo3
最新推荐文章于 2018-01-11 11:42:17 发布