Server:import java.net.*;
import java.io.*;public class TalkServer {
public static void main(String[] args) throws Exception { ServerSocket ss =new ServerSocket(8888);
Socket s =ss.accept();
System.out.println("A Client Connect"); String line; BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw =new PrintWriter(s.getOutputStream());
BufferedReader bur =new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(bur.readLine());
line =br.readLine();
while(!line.equalsIgnoreCase("exit")) {
pw.println(line);
pw.flush();
System.out.println("Server :" +line);
System.out.println(bur.readLine());
line =br.readLine();
}
}
}Client:import java.net.*;
import java.io.*;public class TalkClient {
public static void main(String[] args) throws Exception {
//请求连接
Socket s =new Socket("127.0.0.1" ,8888);
String line ;
//读取键盘输入
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
OutputStream os =s.getOutputStream();
//获得输出流
PrintWriter pw =new PrintWriter(os);
//获得输入流读取Server端数据
BufferedReader bur =new BufferedReader(new InputStreamReader(s.getInputStream()));
line =br.readLine(); while(!line.equalsIgnoreCase("exit")) {
pw.println(line);
pw.flush();
System.out.println("Client :" +bur.readLine());
line =br.readLine();
}
}
}
写了个点对点通信的代码,刚开始死活调试不成功(就是我客户端说句话,服务器始终接收不到),经历了痛苦的折磨后,我把Server和Client端的循环里面加了个pw.flush()的方法就好了,不是PrintWriter类自带flush功能(autoflush)吗?
为什么发送数据的时候一定要flush才能接收呢?我纯菜鸟,大家指点,谢谢
import java.io.*;public class TalkServer {
public static void main(String[] args) throws Exception { ServerSocket ss =new ServerSocket(8888);
Socket s =ss.accept();
System.out.println("A Client Connect"); String line; BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw =new PrintWriter(s.getOutputStream());
BufferedReader bur =new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(bur.readLine());
line =br.readLine();
while(!line.equalsIgnoreCase("exit")) {
pw.println(line);
pw.flush();
System.out.println("Server :" +line);
System.out.println(bur.readLine());
line =br.readLine();
}
}
}Client:import java.net.*;
import java.io.*;public class TalkClient {
public static void main(String[] args) throws Exception {
//请求连接
Socket s =new Socket("127.0.0.1" ,8888);
String line ;
//读取键盘输入
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
OutputStream os =s.getOutputStream();
//获得输出流
PrintWriter pw =new PrintWriter(os);
//获得输入流读取Server端数据
BufferedReader bur =new BufferedReader(new InputStreamReader(s.getInputStream()));
line =br.readLine(); while(!line.equalsIgnoreCase("exit")) {
pw.println(line);
pw.flush();
System.out.println("Client :" +bur.readLine());
line =br.readLine();
}
}
}
写了个点对点通信的代码,刚开始死活调试不成功(就是我客户端说句话,服务器始终接收不到),经历了痛苦的折磨后,我把Server和Client端的循环里面加了个pw.flush()的方法就好了,不是PrintWriter类自带flush功能(autoflush)吗?
为什么发送数据的时候一定要flush才能接收呢?我纯菜鸟,大家指点,谢谢
楼主【yihaijian1】截止到2008-08-03 16:51:51的历史汇总数据(不包括此帖):
发帖的总数量:6 发帖的总分数:260 每贴平均分数:43
回帖的总数量:32 得分贴总数量:6 回帖的得分率:18%
结贴的总数量:6 结贴的总分数:260
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=yihaijian1
系统自动的是垃圾回收
在建立pringWriter实例时,需要用boolean型指定,是不是自动刷新,如果没有指定自动刷新,则需要自己来flush.
我记得一个是当流关闭时,会讲缓冲区数据自动输出
一个是当流所在的通道的状态变化时,会使缓冲区输出
一个是当缓冲区满时,会输出你可以自己考虑下,什么叫缓冲?
flush的作用就是将缓冲的数据压出