Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Между делом"
Ответов: 91
Рейтинг: 0
#1: 2019-09-24 05:59:03 ЛС | профиль | цитата
Здравствуйте!
В программе нужно получить точное время с NTP сервера. В Hiasm и на форуме ничего не нашел. На просторах интернета есть код


public static DateTime GetNetworkTime()
{
const string ntpServer = "pool.ntp.org";
var ntpData = new byte[48];
ntpData[0] = 0x1B; //LeapIndicator = 0 (no warning), VersionNum = 3 (IPv4 only), Mode = 3 (Client Mode)

var addresses = Dns.GetHostEntry(ntpServer).AddressList;
var ipEndPoint = new IPEndPoint(addresses[0], 123);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

socket.Connect(ipEndPoint);
socket.Send(ntpData);
socket.Receive(ntpData);
socket.Close();

ulong intPart = (ulong)ntpData[40] ‹‹ 24 | (ulong)ntpData[41] ‹‹ 16 | (ulong)ntpData[42] ‹‹ 8 | (ulong)ntpData[43];
ulong fractPart = (ulong)ntpData[44] ‹‹ 24 | (ulong)ntpData[45] ‹‹ 16 | (ulong)ntpData[46] ‹‹ 8 | (ulong)ntpData[47];

var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
var networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);

return networkDateTime;
}

Как его использовать в Hiasm? В какой элемент вставить код?
карма: 0

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#2: 2019-09-24 06:58:17 ЛС | профиль | цитата
Demo


Add(hcButton,2,91,105)
{
link(onClick,4:doInline,[])
}
Add(hcVisualText,3,252,105)
{
@Color=16777215
Height=37
Width=125
}
Add(hcInline,4,182,105)
{
Code=#58:// Method signature: public object doInline(object[] args)|40:const string ntpServer = "pool.ntp.org";|27:var ntpData = new byte[48];|103:ntpData[0] = 0x1B; //LeapIndicator = 0 (no warning), VersionNum = 3 (IPv4 only), Mode = 3 (Client Mode)|0:|56:var addresses = Dns.GetHostEntry(ntpServer).AddressList;|51:var ipEndPoint = new IPEndPoint(addresses[0], 123);|88:var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);|0:|27:socket.Connect(ipEndPoint);|21:socket.Send(ntpData);|24:socket.Receive(ntpData);|15:socket.Close();|0:|115:ulong intPart = (ulong)ntpData[40] << 24 | (ulong)ntpData[41] << 16 | (ulong)ntpData[42] << 8 | (ulong)ntpData[43];|117:ulong fractPart = (ulong)ntpData[44] << 24 | (ulong)ntpData[45] << 16 | (ulong)ntpData[46] << 8 | (ulong)ntpData[47];|0:|74:var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);|85:var networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);|0:|34:return networkDateTime.ToString();|
Imports=#6:System|10:System.Net|18:System.Net.Sockets|5:HiAsm|
link(onResult,3:doText,[])
}

Редактировалось 3 раз(а), последний 2020-08-18 11:44:34
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 203
Рейтинг: 2
#3: 2019-10-10 15:27:31 ЛС | профиль | цитата
Nic, предыдущий пост сделал мой день. Хоть возьми и текущий проект переделай на Net.
А можно проекты на Net будет запустить под Linux ?
карма: 0

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#4: 2019-10-10 15:39:45 ЛС | профиль | цитата
kaban4ik писал(а):
А можно проекты на Net будет запустить под Linux ?


Если не желать многого, то да: https://forum.hiasm.com/topic/67299
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 91
Рейтинг: 0
#5: 2020-08-18 10:17:00 ЛС | профиль | цитата
Поднял старую тему. На радостях даже спасибо забыл сказать.
А подскажите, как результат с миллисекундами вывести?

--- Добавлено в 2020-08-18 10:27:01

Сам допёр return networkDateTime.ToString("MM/dd/yyyy HH:mm:ss.fff");

Редактировалось 1 раз(а), последний 2020-08-18 10:27:01
карма: 0

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)