However when I tested with a UDP version the response from one instance of the game was very slow - as much as a second passes before you can see the other plane move. Which is strange because over TCP the response is instant. What am I doing wrong? If it helps, here is relevant code minus a lot of error checking etc
int main()
{
bool server;
std::cout << "Run as server? 1/0 ";
std::cin >> server;
std::cout << std::endl;
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
SOCKET udpSocket = INVALID_SOCKET;
if (server)
{
udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN address;
address.sin_family = AF_INET;
address.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
address.sin_port = htons(SERVER_PORT_UDP);
bind(udpSocket, (SOCKADDR*)&address, sizeof(SOCKADDR_IN));
DWORD mode = 1;
ioctlsocket(udpSocket, FIONBIO, &mode);
}
else
{
udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN address;
address.sin_family = AF_INET;
address.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
address.sin_port = htons(CLIENT_PORT_UDP);
bind(udpSocket, (SOCKADDR*)&address, sizeof(SOCKADDR_IN));
DWORD mode = 1;
ioctlsocket(udpSocket, FIONBIO, &mode);
}
< snip graphics,scene initialisation etc >
while (window->MessagePump())
{
// packet: float4x4 transform
< snip update+rendering>
if (server)
{
SOCKADDR_IN destAddress;
destAddress.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
destAddress.sin_family = AF_INET;
destAddress.sin_port = htons(CLIENT_PORT_UDP);
sendto(udpSocket, (char*)(void*)&plane->Transform, sizeof(Matrix), 0, (SOCKADDR*)&destAddress, sizeof(SOCKADDR));
recvfrom(udpSocket, (char*)(void*)&enemy->Transform, sizeof(Matrix), 0, NULL, 0);
}
else
{
SOCKADDR_IN destAddress;
destAddress.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
destAddress.sin_family = AF_INET;
destAddress.sin_port = htons(SERVER_PORT_UDP);
recvfrom(udpSocket, (char*)(void*)&enemy->Transform, sizeof(Matrix), 0, NULL, 0);
sendto(udpSocket, (char*)(void*)&plane->Transform, sizeof(Matrix), 0, (SOCKADDR*)&destAddress, sizeof(SOCKADDR));
}
Sleep(10);
}
closesocket(udpSocket);
WSACleanup();
}