关于 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;谁能够详细的解释解释谢谢。
问题补充:
在不出现异常的情况下一直保持连接发送,就是socket连接一次,持续发送,直到出现异常,断开重连。
该问题已经关闭: 超过15天由系统自动关闭

回答

直接BufferOutputStream close,BufferOutputStream 会自己flush。
然后再connection close,scoket close。
XMLDB (初级程序员) 2008-05-12