package com.nets;
import java.io.*;
import java.net.*;
/*
* 需求:建立一个文本转换服务器
* 客户端给服务端发送文本,服务端会将文本转换成大写再返回给客户端
* 而且客户端可以不断的进行文本转换,当客户端输入over时,就接收
*
* 分析:
* 客户端:
* 既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作来思考
* 源:键盘录入
* 目的:网络设备,网络输出流
* 而且操作的是文本数据,可以选择字符流。
*
* 步骤:
* 1.建立服务
* 2.获取键盘录入
* 3.将数据发给服务端
* 4.获取服务端返回的大写数据
* 5.结束,关闭资源
*
* 都是文本数据可以使用字符流进行操作,同时提高效率,加入缓冲
*
* */
public class TcpClient2 {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws Exception, IOException {
Socket s=new Socket(InetAddress.getLocalHost(),10010);
//定义读取键盘数据的流对象
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写入到socket输入流,发给服务端
BufferedWriter bufOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//定义一个Socket读取流,读取服务端返回的信息
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line =null;
//注意:readLine方法
while((line=bufr.readLine())!=null){
bufOut.write(line);
bufOut.newLine();
//一定要记得刷新
bufOut.flush();
if("over".equals(line))
break;
String str=bufIn.readLine();
System.out.println("server:"+str);
}
bufr.close();
s.close();
}
}
package com.nets;
import java.io.*;
import java.net.*;
/*
* 服务端:
* 源:socket读取流
* 目的:socket输出流
* 都是文本,装饰
*
* 该例子出现的问题:
* 现象:客户端和服务端都在莫名的的等待
* 为什么呢?
* 因为客户端和服务端都有堵塞式方法,这些方法都没有结束标记。
* 而导致两端都在等待
* */
public class TcpServer2 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
ServerSocket ss=new ServerSocket(10010);
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()));
PrintWriter ps=new PrintWriter(s.getOutputStream(),true);
String line=null;
while((line=bufIn.readLine())!=null){
//System.out.println("fuwuduan");
ps.println(line);
//bufOut.write(line.toUpperCase());
//bufOut.newLine();
//bufOut.flush();
}
s.close();
ss.close();
}
}
请问,为什么我的没有在服务端输出结果? |
|