bool cycle = 0; INT32 Soc;
//-----------------------------------------------------------------------------
void Connect()
{
int Soc1;
SOCKADDR_IN Sin1;
int Sin1len = sizeof(Sin1);
Soc1 = accept(Soc,(struct sockaddr*)&Sin1, &Sin1len); //функция извлечения будет висеть пока не получит клиента
if(Soc1 <= 0)
{
Application->MessageBox("Ошибка при извлечении из очереди запроса на соединение!", "Ошибка...", MB_OK+MB_ICONERROR);
}
else
{
char* Ipbuf = inet_ntoa(Sin1.sin_addr); //номер узла сети
AnsiString a2 = Ipbuf;
int b = htons(Sin1.sin_port); //номер порта
AnsiString Message = "Принято соединение с " + a2 + " " + IntToStr(

;
Application->MessageBox(Message.c_str(), "Сообщение...", MB_OK+MB_ICONINFORMATION);
BYTE RecvErrorBuffer[1];
char RecvBuffer[20];
while(recv(Soc1, RecvErrorBuffer, sizeof(RecvBuffer), 0)!= SOCKET_ERROR)
{
// printf("%c", RecvBuffer[0]);
recv(Soc1, RecvBuffer, sizeof(RecvBuffer), MSG_DONTROUTE);
}
// тут идентификация, обработка данных на отправку на другой девайс, сохранение и т. д.
closesocket(Soc1);
}
}
//-----------------------------------------------------------------------------
void __fastcall TfServer::B_WaitngModeClick(TObject *Sender)
{
//
Soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(Soc == -1)
{
Application->MessageBox("Ошибка работы функции создания Socket!", "Ошибка...", MB_OK+MB_ICONERROR);
}
else
{
SOCKADDR_IN Sin;
Sin.sin_family = AF_INET;
Sin.sin_port = htons(80);
Sin.sin_addr.s_addr = INADDR_ANY; /
int Bnd;
Bnd = bind(Soc, (LPSOCKADDR)&Sin, sizeof(Sin));
//(LPSOCKADDR)&Sin - указывает на структуру данных, содержащую локальный адрес, приписываемый socket'у (для TCP/IP)
if(Bnd == -1)
{
Application->MessageBox("Ошибка при определении локального адреса канала связи со средой!", "Ошибка...", MB_OK+MB_ICONERROR);
}
else
{
int Lstn;
Lstn = listen(Soc, SOMAXCONN);
// SOMAXCONN - определяет максимальную длину очереди входящих запросов на установление связи
if(Lstn != 0)
{
Application->MessageBox("Ошибка при ожидании запроса!", "Ошибка...", MB_OK+MB_ICONERROR);
}
else
{
// do
// {
Connect();
// }while(cycle == 0);
}
}
}
}
//-------------------------------------------------------------------------------------------------------------------
Вот общий каркас сервака с одни рабочим сокетом, к которому все цепляются, делают своё "чёрное дело" и отцепляются.
Как он (сервер) будет держать несколько сокетов и несколько девайсов на них?
Как будет организовываться пересыл данных между девайсами на разных сокетах?
Как будет оганизовано пересыл между несколькими парами устройств?