问答首页 查看问题

关于 BufferOutputStream 的创建与关闭 Socket 相关

悬赏:20 发布时间:2008-05-12 提问人:blowacoldwind (初级程序员)

package ecclclient;

import java.net.*;
import java.io.*;
import eccl.socket.tools.ByteOperator;

public class TCPClient{
    public static void main(String[] args) throws Exception{	
    	
    	Socket s = null;
    	BufferedOutputStream w = null;
    	byte[] sendByte = new byte[512];
    	java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	
    	java.util.Date initDate = df.parse("1970-01-01 00:00:00");
    	java.util.Date nowDate = new java.util.Date();
    	java.util.Date startDate = new java.util.Date();
    	java.util.Date endDate = new java.util.Date();
    	
    	long nowtime = (nowDate.getTime()-initDate.getTime())/1000;
    	long starttime = (startDate.getTime()-initDate.getTime())/1000; 
    	long endtime = (endDate.getTime()-initDate.getTime())/1000; 
    	//System.out.print(nowtime+"\n");

        for (int i = 0; i<512; i++) {
        	sendByte[i] = -1;
	    }
    	 putFloat(sendByte,4,30);
          putInt(sendByte,8,1);            
            putInt(sendByte,12,3);           
        s = new Socket("127.0.0.1",6800);	
         w = new BufferedOutputStream(s.getOutputStream());
        try{
        	for (int i = 0; i<20000; i++) {
	    	Thread.sleep(20000);
	    	putFloat(sendByte,4,30+i);
		w.write(sendByte);
	    	w.flush();
         }

        }catch(Exception e){
        	System.out.print("The program can't send the date!\n"+e);
        }
        finally{
        	w.close();
        	s.close();
        }
        
    }
    
	/**   
	*   整形转化为byte类型  
	*/   
	private static void putInt(byte[] buf,int offset,int value)   {   
		buf[offset+0] = (byte)((value  >> 24) & 0xff);   
		buf[offset+1] = (byte)((value  >> 16) & 0xff);   
		buf[offset+2] = (byte)((value  >> & 0xff);   
		buf[offset+3] = (byte)((value  >> 0)  & 0xff);   
	}
	/**   
	*   长整形转化为byte类型  
	*/ 
	public static void putLong(byte[] buf,int offset,long value) { 
        buf[offset + 0] = (byte) ((value >> 56) & 0xff); 
        buf[offset + 1] = (byte) ((value >> 48) & 0xff); 
        buf[offset + 2] = (byte) ((value >> 40) & 0xff); 
        buf[offset + 3] = (byte) ((value >> 32) & 0xff); 
        buf[offset + 4] = (byte) ((value >> 24) & 0xff); 
        buf[offset + 5] = (byte) ((value >> 16) & 0xff); 
        buf[offset + 6] = (byte) ((value >>& 0xff); 
        buf[offset + 7] = (byte) ((value >> 0) & 0xff); 
    } 

	/**   
	*   字符串转化为byte类型  
	*/ 
	private static void putStr(byte[] buf,int offset,int length,String value) {
		try{
			byte[] tmpByte = value.getBytes();
			for(int i=offset+length-1;i>=offset;i--){
				buf[offset+i] = tmpByte[i];	
			}
		}catch(Exception e)
		{
			System.out.print("convert the String to Byte is error!\n");
		}
	}



	/**
     *  浮点型转化为byte类型
     */
	
	public static void putFloat(byte[] buf,int offset,float value){
		
		try {
			putInt(buf,offset,Float.floatToIntBits(value));
	    }
	    catch (Exception ex) {
	    	System.out.print("convert the float to Byte is error!\n");
	    }
		
	}    
}



我要发送大量的数据包 BufferOutputStream 该什么时候关闭,关闭它的时候 Socket.isClosed()=true;Socket.isConnected()=true;谁能够详细的解释解释谢谢。

回答

2008-05-12 XMLDB (初级程序员)

直接BufferOutputStream close,BufferOutputStream 会自己flush。
然后再connection close,scoket close。

问答分类

Java

Hibernate J2ME OO 设计模式 企业应用 Webwork Struts Spring

Ruby

rails

AJAX

prototype AJAX EXT JavaScript

软件开发和项目管理

项目管理 XP

综合技术

数据结构和算法 Linux PHP Database

招聘求职

职场话题 面试秘籍

海阔天空

游戏 IT八卦 体育 生活 读书 工作 公告

入门讨论

Java Ruby 其他综合

行业解决方案

互联网

Microsoft .Net

C# .net

答题高手

 

问题频道帮助