A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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却不行呢?我也加换行符啦?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 吼吼,论坛毕业证书!

查看全部评分

2 个回复

倒序浏览
因为BufferedWriter会将所有的输入全部写入暖冲区中。当写满缓冲区或关闭输出流时,它再一次性输出到流,或者用flush()方法主动将缓冲区输出到流。

你在 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())) ;//发送
这行代码后面写out.close(); 或者 out.flush(); 应该就可以了。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
2楼正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马