Application->MessageBoxA("Ошибка WSAStartup!", "Error!", MB_OK);
Form1->Button1->Enabled = TRUE;
return;
}
//создание сокета
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
Application->MessageBoxA("Невозможно создать сокет", "Error!", MB_OK);
Form1->Button1->Enabled = TRUE;
return;
}
server.sin_family = AF_INET;
server.sin_port = htons(iPort);
server.sin_addr.s_addr = inet_addr(cAddress);
if (server.sin_addr.s_addr == INADDR_NONE)
{
// Если не указан IP-адрес
Application->MessageBoxA("Напрвальный IP адрес", "Error!", MB_OK);
Form1->Button1->Enabled = TRUE;
return;
}
if (connect(sClient, (struct sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR)
{
Application->MessageBoxA("Неудалось подключится к серверу", "Error!", MB_OK);
Form1->Button1->Enabled = TRUE;
return;
}
req.typeRequest = 0; //запрос на синхронизацию
req.typeSender = 5; //идентификатор рабочей станции
req.lengthPack = sizeof(request);
//отправка запроса на синхронизацию времени
nLeft = req.lengthPack;
idx = 0;
while(nLeft > 0)
{
ret = send(sClient, ((char *)&req) + idx, nLeft, 0);
if (ret == SOCKET_ERROR)
{
Application->MessageBoxA("Ошибка отправки запроса на синхронизацию", "Error!", MB_OK);
CloseClientSocket();
return;
}
nLeft -= ret;
idx += ret;
}
//приём времени сервера и установка его в системе
nLeft = sizeof(time_t);
idx = 0;
while(nLeft > 0)
{
ret = recv(sClient, ((char *)&UpdateTime)+idx, nLeft, 0);
if ((ret == SOCKET_ERROR)||(ret == 0))
{
Application->MessageBoxA("Ошибка приёма времени", "Error!", MB_OK);
CloseClientSocket();
return;
}
nLeft -= ret;
idx += ret;
}
// установка времени в системе
//stime(&UpdateTime);
Form1->Button2->Enabled = TRUE;
Form1->Button3->Enabled = TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CloseClientSocket();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int iTypeUVM, nLeft, idx, ret;
package1 pack1;
package2 pack2;
packageServer packServ;
requestRange reqRange;
tm tmBegin, tmEnd, *tmTime;
time_t time_tBegin, time_tEnd;
unsigned long i;
Form1->Button3->Enabled = FALSE;
StringGrid1->RowCount = 2;
StringGrid1->Rows[1]->Clear();
//формирование структур времени
tmBegin.tm_sec = Form1->ComboBox3->ItemIndex;
tmBegin.tm_min = Form1->ComboBox2->ItemIndex;
tmBegin.tm_hour = Form1->ComboBox6->ItemIndex;
tmBegin.tm_mday = Form1->ComboBox8->ItemIndex+1;
tmBegin.tm_mon = Form1->ComboBox10->ItemIndex;
tmBegin.tm_year = Form1->ComboBox12->ItemIndex+70;
tmBegin.tm_isdst = 0;
time_tBegin = mktime(&tmBegin);
if (time_tBegin == -1)
{
Application->MessageBoxA("Ошибка преобразования начального времени", "Error!", MB_OK);
Form1->Button3->Enabled = TRUE;
return;
}
tmEnd.tm_sec = Form1->ComboBox5->ItemIndex;
tmEnd.tm_min = Form1->ComboBox4->ItemIndex;
tmEnd.tm_hour = Form1->ComboBox7->ItemIndex;
tmEnd.tm_mday = Form1->ComboBox9->ItemIndex+1;
tmEnd.tm_mon = Form1->ComboBox11->ItemIndex;
tmEnd.tm_year = Form1->ComboBox13->ItemIndex+70;
tmEnd.tm_isdst = 0;
time_tEnd = mktime(&tmEnd);
if (time_tBegin == -1)
{
Application->MessageBoxA("Ошибка преобразования конечного времени", "Error!", MB_OK);
Form1->Button3->Enabled = TRUE;
return;
}
if (time_tEnd < time_tBegin)
{
Application->MessageBoxA("Конечное время меньше начального", "Error!", MB_OK);
Form1->Button3->Enabled = TRUE;
return;
}
iTypeUVM = Form1->ComboBox1->ItemIndex + 1;
//Формирование шапки таблицы
if (iTypeUVM == 1)
{
StringGrid1->Cells[7][0] = "Скорость 1";
StringGrid1->Cells[8][0] = "Скорость 2";
StringGrid1->Cells[9][0] = "Темпер. 1";
StringGrid1->Cells[10][0] = "Темпер. 2";
StringGrid1->Cells[11][0] = "Темпер. 3";
StringGrid1->Cells[12][0] = "Вес 1";
StringGrid1->Cells[13][0] = "Вес 2";
StringGrid1->Cells[14][0] = "Вес 3";
StringGrid1->Cells[15][0] = "Длина 1";
StringGrid1->Cells[16][0] = "Длина 2";
}
else
{
StringGrid1->Cells[7][0] = "Скорость 1";
StringGrid1->Cells[8][0] = "Скорость 2";
StringGrid1->Cells[9][0] = "Скорость 3";
StringGrid1->Cells[10][0] = "Темпер. 1";
StringGrid1->Cells[11][0] = "Темпер. 2";
StringGrid1->Cells[12][0] = "Вес 1";
StringGrid1->Cells[13][0] = "Вес 2";
StringGrid1->Cells[14][0] = "Вес 3";
StringGrid1->Cells[15][0] = "Вес 4";
StringGrid1->Cells[16][0] = "Длина";
}
//формирование и отсылка запроса на диапазон времён
reqRange.typeRequest = 2;
reqRange.typeSender = 5;
reqRange.lengthPack = sizeof (requestRange);
reqRange.iTypeUVM = iTypeUVM;
reqRange.tBegin = time_tBegin;
reqRange.tEnd = time_tEnd;
nLeft = reqRange.lengthPack;
idx = 0;
while(nLeft > 0)
{
ret = send(sClient, ((char *)&reqRange) + idx, nLeft, 0);
if (ret == SOCKET_ERROR)
{
Application->MessageBoxA("Ошибка отправки запроса на приём данных", "Error!", MB_OK);
CloseClientSocket();
return;
}
nLeft -= ret;
idx += ret;
}
//приём от сервера кол-ва записей входяих в диапазон
nLeft = sizeof(packageServer);
idx = 0;
while(nLeft > 0)
{
ret = recv(sClient, ((char *)&packServ)+idx, nLeft, 0);
if ((ret == SOCKET_ERROR)||(ret == 0))
{
Application->MessageBoxA("Ошибка приёма количества данных", "Error!", MB_OK);
CloseClientSocket();
return;
}
nLeft -= ret;
idx += ret;
}
if (packServ.AmountPacks == 0)
{
Application->MessageBoxA("Нет данных в заданном диапазоне времени", "Error!", MB_OK);
Form1->Button3->Enabled = TRUE;
return;
}
//приём в цикле записей
StringGrid1->RowCount = packServ.AmountPacks+1;
for (i = 0; i<packServ.AmountPacks; i++)
{
if (iTypeUVM == 1)
nLeft = sizeof(package1);
else
nLeft = sizeof(package2);
idx = 0;
while(nLeft > 0)
{
if (iTypeUVM == 1)
ret = recv(sClient, ((char *)&pack1)+idx, nLeft, 0);
else
ret = recv(sClient, ((char *)&pack2)+idx, nLeft, 0);
if ((ret == SOCKET_ERROR)||(ret == 0))
{
Application->MessageBoxA("Ошибка приёма структуры данных", "Error!", MB_OK);
CloseClientSocket();
return;
}
nLeft -= ret;
idx += ret;
}//while
//отображение полученной записи
StringGrid1->Cells[0][i+1] = i+1;
if (iTypeUVM == 1)
tmTime = localtime(&pack1.time);
else
tmTime = localtime(&pack2.time);
StringGrid1->Cells[1][i+1] = (*tmTime).tm_year+1900;
StringGrid1->Cells[2][i+1] = (*tmTime).tm_mon;
StringGrid1->Cells[3][i+1] = (*tmTime).tm_mday+1;
StringGrid1->Cells[4][i+1] = (*tmTime).tm_hour;
StringGrid1->Cells[5][i+1] = (*tmTime).tm_min;
StringGrid1->Cells[6][i+1] = (*tmTime).tm_sec;
if (iTypeUVM == 1)
{
StringGrid1->Cells[7][i+1] = pack1.speed1;
StringGrid1->Cells[8][i+1] = pack1.speed2;
StringGrid1->Cells[9][i+1] = pack1.temperature1;
StringGrid1->Cells[10][i+1] = pack1.temperature2;
StringGrid1->Cells[11][i+1] = pack1.temperature3;
StringGrid1->Cells[12][i+1] = pack1.weight1;
StringGrid1->Cells[13][i+1] = pack1.weight2;
StringGrid1->Cells[14][i+1] = pack1.weight3;
StringGrid1->Cells[15][i+1] = pack1.length2;
StringGrid1->Cells[16][i+1] = pack1.length2;
}
else
{
StringGrid1->Cells[7][i+1] = pack2.speed1;
StringGrid1->Cells[8][i+1] = pack2.speed2;
StringGrid1->Cells[9][i+1] = pack2.speed3;
StringGrid1->Cells[10][i+1] = pack2.temperature1;
StringGrid1->Cells[11][i+1] = pack2.temperature2;
StringGrid1->Cells[12][i+1] = pack2.weight1;
StringGrid1->Cells[13][i+1] = pack2.weight2;
StringGrid1->Cells[14][i+1] = pack2.weight3;
StringGrid1->Cells[15][i+1] = pack2.weight4;
StringGrid1->Cells[16][i+1] = pack2.length;
}
}//for
Form1->Button3->Enabled = TRUE;
}
//---------------------------------------------------------------------------