我在做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("断开通信!");
}
}
}
}
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("断开通信!");
}
}
}
}
解决方案 »
- 为什么说“内存中一共有2万多个”对象
- org.hibernate.QueryException: could not resolve property: DownloadFile
- 使用 java 写 asterisk AGI 编译 出错
- 类浏览器?
- 怎么看懂一个很长,很复杂的正则表达式?
- 高手请快来救命,如何将同一个package下不同class的变量相互赋值
- 请教大家一个问题,关于类装载、实例化。
- 菜鸟初学JAVA,有个问题?
- 请问用java如何判断输入的内容是字符还是数字啊?
- hello world 程序的问题!执行不了……
- 数据结构和JAVA
- 在线等~~~~~~~~~~String的问题
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("与服务器断开!");
}
}
}
在flush前加BufferedWriter.newLine就可以了。