我在做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("断开通信!");
}
}
}
}
解决方案 »
- java静态方法问题
- java运行exec()杀进程的问题
- 怎么通过int看枚举类型
- equals()方法疑问!!!
- 求助~~添加数据后 Jtable 表怎么自动添加一行 请高手帮忙~~~~~~~~~~~~~
- jdk1。4。2-09 安装好之后点击java web start 出现:Splash:sysCreateListenerSocket失败信息
- 特请各位哥哥姐姐求救!小妹不是学JAVA但由于某种的事情需要,小妹想在这里请教一些很基础的数据库连接问题!谢谢!
- 输入检查
- 大家不要见笑啦!
- 现在大四,还来得及学JAVA找工作吗?
- 数据结构和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就可以了。