Я работаю над проектом управления роботом, где я должен прежде всего (1) отправить некоторые данные о скорости и фиксированных позициях роботу, затем (2) запустить управление в реальном времени с помощью моего ПК и повторить. Я решил использовать TCP/IP для первого шага и для UDP/IP в реальном времени. Я пытался это кодировать, но я считаю, что чего-то не хватает.Переключение между TCP и UDP одновременно
У меня есть некоторые проблемы:
1- Когда нет входящих (клиентов) соединений принимают функцию не возвращать допустимый сокет, ни сообщение [10] печатаются !!
2. Согласен ли Sendto использовать тот же IP-адрес сервера и порт?
3- Это правильный способ переключения между UDP и TCP взад и вперед или есть некоторые соображения, которые необходимо предпринять?
while(Comm_Loop)
{
while (TCP_Loop)
{
TCP_Client = accept(TCP_Server, (struct sockaddr*) &Client_Address, &Client_Address_Length) ;
if (TCP_Client != INVALID_SOCKET)
{
if (Data_Trans)
{
State = send(TCP_Client, Msg, sizeof(Msg), 0) ;
if (State != SOCKET_ERROR)
TCP_Loop = 0 ;
else
cout << Message[8] ;
}
}
else cout << Message[10] ;
}
Check_Send = sendto(UDP_Socket,
UDP_Send_Packet,
sizeof(UDP_Send_Packet),
0,
(LPSOCKADDR) &Socket_Address,
sizeof(Socket_Address));
fd_set SockSet ;
timeval Time_Out ;
FD_ZERO(&SockSet) ;
FD_SET(UDP_Socket, &SockSet);
Time_Out.tv_sec = 5;
Time_Out.tv_usec = 0 ;
State = select(0, &SockSet, (fd_set *)NULL, (fd_set *)NULL, &Time_Out) ;
if((State > 0) && (FD_ISSET(UDP_Socket, &SockSet) != 0))
{
Check_Recieve = recvfrom(UDP_Socket,
UDP_Recieve_Packet,
Buffer_Length,
0,
NULL,
NULL);
TCP_Loop = 1 ;
}
else
{
// Reception timeout
Comm_Loop = 0;
}
}
closesocket(TCP_Client) ;
closesocket(TCP_Server) ;
closesocket(UDP_Socket) ;
WSACleanup() ;
return 0;
}
Вам небезразлична потеря пакетов? Если да, то придерживайтесь TCP/IP. Если не использовать UDP. Если вы чувствуете необходимость в повторной отправке пакета UDP (в случае потери), используйте TCP/IP. Большая часть служебных данных TCP/IP заключается в открытии начального соединения. После открытия очень мало различий в скорости над надежным подключением. –
Я попробую обе технологии, но я думал, что TCP/IP не в реальном времени – Mahjob