解决方案 »
- o Java virtual machine was found after searching the following locations: /home/
- java Swing布局中JFrame添加new JScrollPane(JTextArea)控制大小
- 字符串转换成数组!~
- 兼容简繁体汉字的问题
- 想买Java 核心技术,不知道哪本才是正货,下午就要买,急,立马给分!
- 线程的方法与状态问题?
- 实时提交数据或文件到其它服务器数据库中或内存的开源框架是什么?谢谢!
- 小问题,求教各位高手,如何得到“树”组件上“叶子”的“名字”????!!!!
- 有关VisualAge
- 使用jbuilder6如何来连接ms Access6的数据库?请举例,谢谢!
- 如何学习java类库
- 正则表达式验证整数但不包括某些数
何谓缓冲区呢,就是在你本机器上创建一个空间,这个空间可以让你先放些东西进去,比如你os.println进去的内容,如果你不调用flush,那么println进去的内容就只是留在缓冲区中,而不是进入网络传输通道传输到客户端。
说得有些杂了,举个例子恶心的例子:马桶就是你上面的client端,便池就是你上面的Server端,os.println就是你拉了屎,但你拉屎是拉在马桶的桶身中,如果你不冲一下水(flush方法),那屎就永远停留在桶身中,而不会自动流到便池。
同理很多流都有一个这样的池子,专业术语叫缓冲区,当你print或者write的时候,会暂时保存在缓冲区,并没有发送出去,这是出于效率考虑的,因为数据不会自己发送过去,必须有其他机制,而且这个很消耗资源,就像马桶你需要很多水,才能冲走,你如果扔一点东西,就冲一次水,那你水费要爆表了,同样如果你写一行文字,或者一个字节,就要马上发送出去,那网络流量,CPU使用率等等都要爆表了,所以一般只有在你真正需要发送否则无法继续的时候,调用flush,将数据发送出去。
import java.net.*;
public class talkclient
{
public static void main(String args[])
{
try
{
Socket socket = new Socket("127.0.0.1",4700);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String readline;
readline = sin.readLine();
while (!readline.equals("bye"))
{
os.println(readline);
os.flush(); //不加就运行不正常
System.out.println("Client:" + readline);
System.out.println("Server:" + is.readLine());
readline = sin.readLine();
}
os.close();
is.close();
socket.close();
}catch(Exception e)
{
System.out.println("Error" + e);
}
}
}
import java.net.*;
import java.applet.Applet;
public class talkserver
{
public static void main(String args[])
{
try
{
ServerSocket server = null;
try
{
server = new ServerSocket(4700);
}catch(Exception e)
{
System.out.println("can not listen to:" + e);
}
Socket socket = null;
try
{
socket = server.accept();
}catch(Exception e)
{
System.out.println("Error:" + e);
}
String line;
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:" + is.readLine());
line = sin.readLine();
while (!line.equals("bye"))
{
os.println(line);
os.flush();
System.out.println("Server:" + line);
System.out.println("Client:" + is.readLine());
line = sin.readLine();
} is.close();
os.close();
socket.close();
server.close();
}catch(Exception e)
{
System.out.println("Error" + e);
}
}
}
这不是举例子,是因为flush本身就是指冲马桶