我写了个socket的例子,为什么 用BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); 这样写socket通讯好像不通,而我用 注释里的那种写法 :PrintWriter out = new PrintWriter(client.getOutputStream()); 这样客户端发包,服务端收得到信息,而且能返回应答包,为什么会这样??【code=Java】
public class MyServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(5678);
Socket client = server.accept();
BufferedReader bufReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
//PrintWriter out = new PrintWriter(client.getOutputStream());
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
while (true) {
String str = bufReader.readLine();
System.out.println(str);
//out.println("has receive....");
out.write("has receive....");
out.flush();
if (str.equals("end"))
break;
}
client.close();
}
}
public class Client {
static Socket server; public static void main(String[] args) throws Exception {
server = new Socket("192.168.10.40", 5678);
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
// PrintWriter out = new PrintWriter(server.getOutputStream());
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
BufferedReader wt = new BufferedReader(new InputStreamReader(System.in)); while (true) {
String str = wt.readLine();
out.write(str);
// out.println(str);
out.flush();
if (str.equals("end")) {
break;
}
System.out.println(in.readLine());
}
server.close();
}
}【/code】
public class MyServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(5678);
Socket client = server.accept();
BufferedReader bufReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
//PrintWriter out = new PrintWriter(client.getOutputStream());
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
while (true) {
String str = bufReader.readLine();
System.out.println(str);
//out.println("has receive....");
out.write("has receive....");
out.flush();
if (str.equals("end"))
break;
}
client.close();
}
}
public class Client {
static Socket server; public static void main(String[] args) throws Exception {
server = new Socket("192.168.10.40", 5678);
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
// PrintWriter out = new PrintWriter(server.getOutputStream());
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
BufferedReader wt = new BufferedReader(new InputStreamReader(System.in)); while (true) {
String str = wt.readLine();
out.write(str);
// out.println(str);
out.flush();
if (str.equals("end")) {
break;
}
System.out.println(in.readLine());
}
server.close();
}
}【/code】
这边以什么格式写进去,那边就应该以什么格式读出来
BufferedReader <-->PrintStream
BufferedReader <-->BufferedWriter
对不?
out.write(str);
out.write("\n");加上红色的这一句,凡是使用BufferedReader.readLine(),而对方使用readLine收的,都要加这一句。为什么,因为readLine读取一行,但丢掉了换行符,
所以,client发出去的数据,永远都在一行上,没有换行,readLine则一致等在那里不返回。