黑马程序员技术交流社区
标题:
网络编程中的IO问题! 请各位大虾指教一下
[打印本页]
作者:
创出一片辉煌
时间:
2012-8-23 23:33
标题:
网络编程中的IO问题! 请各位大虾指教一下
import java.net.* ;
import java.io.* ;
import java.util.*;
public class EchoClient{
public static void main(String args[]) throws Exception { // 所有异常抛出
Socket client = new Socket("localhost",8888) ;// 表示客 户端
Scanner sc=new Scanner(System.in);
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ; // 一次性接收完成
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())) ;//发送
//PrintStream out = new PrintStream(client.getOutputStream()) ;
System.out.print("输入信息:") ;
String str =sc.nextLine() ; // 接收键盘的输入信息
out.write(str) ;
//out.println(str+"\r\n"); readLine读取是是按回车换行符结束的!我加上回车换行可还是不行???????
String echo = buf.readLine() ; // 接收返回结果
System.out.println(echo) ; // 输出回应信息
buf.close() ;
client.close() ;
}
};
------------------------------------------------------------
import java.net.* ;
import java.io.* ;
public class EchoServer{
public static void main(String args[]) throws Exception { // 所有异常抛出
ServerSocket server = new ServerSocket(8888) ; // 服务器在8888端口上监听,定义ServerSocket类
System.out.println("服务器运行,等待客户端连接。") ;
Socket client = server.accept() ; // 得到连接,程序进入到阻塞状态
// 准备接收客户端的输入信息
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
PrintStream out = new PrintStream(client.getOutputStream()) ;
//BufferedWriter out=new BufferedWriter(new OutputStreamWriter(client.getOutputStream())) ;//发送
String str = buf.readLine() ; // 接收客户端发送的内容
System.out.println(str);
out.println("ECHO : " + str) ; // 回应信息
//out.write("ECHO : " + str);
client.close() ;
server.close() ;
}
};
-----------------------------------------------------------------------------
我是准备写一个客户端输出信息,通过服务端把客户端发的信息在返回去,并加上“ECHO:”
可是我用
BufferedWriter
这个类把内容就是传不过去,一直停留在输入状态!我认为是服务器端还不知道信息结束,可是readLine是看到回车符就把这条信息读取,用
PrintStream
可以,为什么用
BufferedWriter 及不可以呢??
用这两个类进行数据的发送有区别吗??我看
PrintStream
的源码println方法是这样的: public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
它同样是用BufferedWriter类的write方法进行输入,并加一个换行符啊??为什么我用BufferedWriter却不行呢?我也加换行符啦?
作者:
黑马_许芸
时间:
2012-8-24 08:11
因为BufferedWriter会将所有的输入全部写入暖冲区中。当写满缓冲区或关闭输出流时,它再一次性输出到流,或者用flush()方法主动将缓冲区输出到流。
你在 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())) ;//发送
这行代码后面写out.close(); 或者 out.flush(); 应该就可以了。
作者:
童兴龙
时间:
2012-8-24 08:32
2楼正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2