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 >> 8) & 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 >> 8) & 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连接一次,持续发送,直到出现异常,断开重连。
相关推荐
【输入与输出流】 输入与输出流是Java编程语言中用于数据传输的核心概念,它们允许程序与外部设备如硬盘、网络、键盘、显示器等进行数据交互。Java的I/O流模型是基于流式处理的,数据按顺序逐个字节或字符传输,即...
根据给定文件的信息,我们可以总结出以下相关的Java知识点: ### 关于while和do-while循环 **题目描述:** 在Java中,`while` 和 `do-while` 循环都是用于实现循环结构的重要语法结构。这两者的主要区别在于循环体...
- `BufferInputStream`和`BufferOutputStream`增加了缓冲功能,提高了读写效率。 - `PipedInputStream`和`PipedOutputStream`用于在不同线程间创建管道通信。 - `DataInputStream`和`DataOutputStream`则提供了对...
Java的输入与输出流是Java程序处理数据传输的关键部分,主要负责数据的读取和写入。本章节涉及的知识点主要包括流的类型、流的方向、流的使用场景以及相关的类和接口。 1. **流的传递方式**:流是按照串行的方式...
例如,我们可以使用`FileInputStream`和`FileOutputStream`读写文件,`BufferInputStream`和`BufferOutputStream`则可以提高读写效率,通过缓冲区进行操作。以下是一个读取输入流并写入字节数组输出流的示例: ```...
* 从数据流中读取数据时,必须有一个数据源与该数据流相连(FileInputStream in = new FileInputStream(“javatest.txt”);) 二、Java.io 包中提供了表示数据流的 4 个基本抽象类 * InputStream、OutputStream...
集合I/O多线程NIOjava基础知识点整理jvmspring 相关MYSQL分布式存储检索java源码学习集合Linkedlist详解Vector详解Stack详解Map构架HashMap详解HashMap put逻辑总结HashMap与HashTable比较HashSet介绍I/...
写入磁盘文件时,会使用 Java 的缓冲输出流 BufferOutputStream,将数据缓冲在内存中,然后写入磁盘文件。 Spark Shuffle 是一种高效的数据处理机制,它可以将数据从 Map 任务输出到 Reduce 任务输入的过程中进行...