java-关于Socket中的输出流缓存问题

问题描述

关于Socket中的输出流缓存问题

为什么以下程序中Send Request cost的输出在第二次之后都是0或者1ms?
public class MyThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
getTime();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void getTime() {
String strServer = "www.baidu.com";
Socket socket = null;
try {
int port = 80;
InetAddress addr = InetAddress.getByName(strServer);
long time3 = System.currentTimeMillis();
socket = new Socket(addr, port);
long time4 = System.currentTimeMillis();
System.out.println("Connect cost:" + (time4 - time3) + "ms");
long time5 = System.currentTimeMillis();
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
wr.write("GET / HTTP/1.0rn");
wr.write("HOST: www.baidu.comrn");
wr.write("Accept:*/*rn");
wr.write("rn");
wr.flush();
long time6 = System.currentTimeMillis();
System.out.println("Send Request cost:" + (time6 - time5)+ "ms");
wr.close();

    } catch (Exception e) {
        System.out.println("Website not access");
        e.printStackTrace();
    }
}

public static void main(String[] args) throws InterruptedException {
    MyThread s = new MyThread();
    new Thread(s).start();
}

}

时间: 2024-11-02 01:11:49

java-关于Socket中的输出流缓存问题的相关文章

java网络编程-Java网络编程中不可以使用缓存吗??

问题描述 Java网络编程中不可以使用缓存吗?? 我使用缓存总是什么都不显示,但是又不抛出异常,也没有什么错! 解决方案 java网络编程之缓存java网络编程之缓存(三)对使用Java Socket网络编程的详细讲解 解决方案二: http://blog.sina.com.cn/s/blog_616e189f0100s3px.html 解决方案三: 是不是其他问题啊?可以使用缓存的,可以贴出主要代码 解决方案四: import java.io.BufferedOutputStream; imp

java 在socket中如何自定义成帧,以及如何调用

问题描述 比如我需要用定界符来成帧,那我应该怎么做?是需要些一个成帧以及解帧的类然后每次输入输出时调用这两个类么? 解决方案 解决方案二:楼主的帧是什么含义?是说要分段的意思么,那么你自己客户端和服务端约定好报文的分隔符即可.接收方需要判断可知完整帧.

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明.   为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入

Java Web项目中使用Socket通信多线程、长连接的方法_java

很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

java中输入输出流中被读取的字节去哪了

问题描述 java中输入输出流中被读取的字节去哪了 比如说,我从缓冲区读入一堆数据,通过字节输入流对象提供的方法,读取了1个字节,后面还有99个字节未读取.然而这一个字节在我读取之后去哪了?是拷贝到某个地方了吗?读取完之后是不是直接从流对象中释放了呢? 解决方案 说白了是存到内存中了之后被java垃圾回收机制从内存中释放了. 解决方案二: java 字节输入输出流Java字节输入输出流

编译错误-java网络socket编程过程中遇到的问题

问题描述 java网络socket编程过程中遇到的问题 运行代码 import java.io.*; import java.net.*; public class InetAddressDemo { public static void main(String[] args) { Socket socket = null; InputStream is = null; OutputStream os = null; String serverIP = "127.0.0.1"; int

关于java问题-Java中web应用缓存是指什么

问题描述 Java中web应用缓存是指什么 请问下web应用缓存 jsp缓存 还有数据库缓存是指什么,前两者有什么异同 解决方案 jsp的缓存一般是指jsp会把用到的页面.页面对应的bean等预编译缓存起来. web应用缓存一般是指,应用层面的缓存,比如把html片段缓存起来. 解决方案二: web应用缓存,就是把一些访问过的网址的资源缓存到浏览器中,下次打开直接从本地加载就快点了 数据库缓存是奖之前的一些查询结果缓存到计算机内存中,下次再查询相同的直接从本地内存存取 解决方案三: web应用缓

Java的MyBatis框架中XML映射缓存的使用教程_java

MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: <cache/> 字面上看就是这样.这个简单语句的效果如下: 1.映射语句文件中的所有select语句将会被缓存. 2.映射语句文件中的所有insert,update和delete语句会刷新缓存. 3.缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回. 4.根据时间表(比如 no Flush Inter

Java基于Socket文件传输示例

最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加快传输的速度.废话少说,先来看服务器端的程序. 1.服务器端 package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream;