关于 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。
然后再connection close,scoket close。
XMLDB (中级程序员) 2008-05-12




