bufferedWriter和PrintWriter

波哥Polly 2009-09-30 02:36:41
我在做TCP通信的练习时用到了bufferedWriter和printWriter两个类,但出现了一个问题:用printWriter写出时,Server那边能收到信息,但BufferedWriter写出时,服务器收不到, 为什么? 代码如下:

下面的失败,但是换成注释的代码又可以;请高手指点!!

//Client端;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ChatClient {
public static void main(String[] args) {

BufferedWriter bw = null;
//PrintWriter pw = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try {
Socket s = new Socket("127.0.0.1",6006);
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//pw = new PrintWriter(s.getOutputStream());
String msg = br.readLine();
while(msg != null && msg.trim().length() != 0) {
bw.write(msg);
//pw.println(msg);
bw.flush();
msg = br.readLine();
}
bw.close();
br.close();
}catch(Exception e) {
System.out.println("与服务器断开!");
}
}
}


//Server端;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

class ChatServer {
public static void main(String[] args)
{
ServerSocket ss = null;

try {
ss = new ServerSocket(6006);
while(true) {
Socket s = ss.accept();
new ChatConn(s);
}

} catch (Exception e) {
System.out.println("error!");
e.printStackTrace();
}
}

static class ChatConn implements Runnable {
Socket s = null;
BufferedReader br = null;
public ChatConn(Socket s) {
this.s = s;
new Thread(this).start();
}
public void run() {
try{
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String msg = br.readLine();
while(msg != null && msg.trim().length() != 0) {
System.out.println(msg);
msg = br.readLine();
}

} catch(Exception e) {
System.out.println("断开通信!");
}
}
}
}

...全文
520 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小樊 2011-09-30
  • 打赏
  • 举报
回复
PrintWriter方法可以写不同平台的换行符,bufferedwriter.newLine换行,使用PrintWriter比较好!
taolei 2009-10-14
  • 打赏
  • 举报
回复
因为比PrintWriter.println少了换行符,客户端永远收不到一行结束的标志。
在flush前加BufferedWriter.newLine就可以了。
ericax 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 taolei 的回复:]
因为比PrintWriter.println少了换行符,客户端永远收不到一行结束的标志。
在flush前加BufferedWriter.newLine就可以了。
[/Quote]
顶!!
lz12366007 2009-10-13
  • 打赏
  • 举报
回复
关注中....
波哥Polly 2009-10-13
  • 打赏
  • 举报
回复
还是收不到
一洽客服系统 2009-09-30
  • 打赏
  • 举报
回复
改一下客户端的代码试试

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ChatClient {
public static void main(String[] args) {

BufferedWriter bw = null;
//PrintWriter pw = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try {
Socket s = new Socket("127.0.0.1",6006);
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//pw = new PrintWriter(s.getOutputStream());
String msg = br.readLine();
while(msg != null && !msg.trim().equals("bye")) {
bw.write(msg);
//pw.println(msg);

System.out.println(">>>>>>>>>."+msg);
bw.newLine();
msg = br.readLine();
}
bw.flush();
bw.close();
br.close();
}catch(Exception e) {
System.out.println("与服务器断开!");
}
}
}



humcomm 2009-09-30
  • 打赏
  • 举报
回复
不了解,帮定
波哥Polly 2009-09-30
  • 打赏
  • 举报
回复
我写了flush();但还是有错,server端接不到数据
Emiya_wang 2009-09-30
  • 打赏
  • 举报
回复
bufferedWriter需要flush 保证缓冲区中的数据都写入

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧