далее...
все пакеты прилетают в приёмник и складываются в приёмный буфер.
1- блок записи файлов (вынесли в отдельную функцию чтоб можно было вызывать из любого места)
public static void TX_EEPROM() {
RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM.txt", "rw");
}
2- главный поток
public static void main(String[] args) throws Exception
{
}
3- в главном потоке есть таймер
Time_0.schedule(new TimerTask() { //start Time_0
},0,1000);//delay, period
4- в главном потоке есть приёмник
DatagramPacket reply = new DatagramPacket(RX_byte, RX_byte.length);
while(true)
{
RX_int[xRX] = RX_byte[xRX];
}// while(true)
Добавлено after 6 minutes 19 seconds:
далее...
если мы хотим записать прилетевшие пакеты на диск то просто вызываем функцию записи в приёмнике.
1- блок записи файлов (вынесли в отдельную функцию чтоб можно было вызывать из любого места)
public static void TX_EEPROM() {
RandomAccessFile E_raf = new RandomAccessFile("D:/EEPROM.txt", "rw");
EEPROM_len = E_raf.length();
E_raf.seek(EEPROM_len);
E_raf.close();
}
2- главный поток
public static void main(String[] args) throws Exception
{
}
3- в главном потоке есть таймер
Time_0.schedule(new TimerTask() { //start Time_0
},0,1000);//delay, period
4- в главном потоке есть приёмник
DatagramPacket reply = new DatagramPacket(RX_byte, RX_byte.length);
while(true)
{
RX_int[xRX] = RX_byte[xRX];
TX_EEPROM();
}// while(true)
функция записи работает так:
-открывает файл "D:/EEPROM.txt"
-определяет длину файла EEPROM_len = E_raf.length();
-передвигает курсор E_raf.seek(EEPROM_len); в конец файла и записывает данные в конец файла.
-закрывает файл.
теперь всё что прилетает в приёмник будет дописываться в конец файла "D:/EEPROM.txt"
Добавлено after 34 minutes 45 seconds:
далее...
если мы хотим писать каждый новый поток в новый файл то просто надо:
-определить когда заканчивается старый поток и начинается новый поток...
-указать функции записи куда писать - в старый файл или создать новый файл и писать в новый файл...
всё))
чтоб определить где заканчивается старый поток и начинается новый поток надо измерить время между прилетающими пакетами...
для этого нам поможет простой счётчик
st и таймер !
static int st = 0; // простой счётчик времени (в миллисекундах)
static String s = "D:/EEPROM_.txt"; // имя файла
static int x = 0; // номером файла "x"
1- блок записи файлов (вынесли в отдельную функцию чтоб можно было вызывать из любого места)
public static void TX_EEPROM() {
if (st > 1000){
x++; if (x > 100){ x = 100; }; // ограничитель x
s = "D:/EEPROM_" + x + ".txt"}; // простой счётчик времени (в миллисекундах) больше 1 секунды > создать новый файл > "D:/EEPROM_x.txt" с номером "x"
RandomAccessFile E_raf = new RandomAccessFile(
s , "rw");
EEPROM_len = E_raf.length();
E_raf.seek(EEPROM_len);
E_raf.close();
}
2- главный поток
public static void main(String[] args) throws Exception
{
}
3- в главном потоке есть таймер
Time_0.schedule(new TimerTask() { //start Time_0
st ++; // простой счётчик времени (в миллисекундах)
if (st > 2000){ st = 2000; }; // ограничитель простой счётчик времени (в миллисекундах)
},0,
1);//period = 1 миллисекунда
4- в главном потоке есть приёмник
DatagramPacket reply = new DatagramPacket(RX_byte, RX_byte.length);
while(true)
{
RX_int[xRX] = RX_byte[xRX];
TX_EEPROM();
st = 0; // сброс простой счётчик времени (в миллисекундах)
}// while(true)
все прилетевшие пакеты (с межпакетным интервалом меньше 1 секунды) будут записаны в существующий файл "D:/EEPROM.txt"
все прилетевшие пакеты (с межпакетным интервалом больше 1 секунды) будут записаны в новый файл "D:/EEPROM_x.txt" с номером "x"
