Я пытаюсь создать UDP-сервер, хотя даже клиент не подключается к нему, он получает соединение... (Он много пишет в консоли - New Connection
, поэтому я предполагаю, что он неожиданно получает новое соединение...)
#include <iostream>
#include <string>
#include <WinSock2.h>
#include <ws2tcpip.h>
#include <Windows.h>
#pragma comment(lib, "ws2_32.lib")
SOCKET ServerOn()
{
SOCKET ListenSocket;
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != NO_ERROR)
{
exit(0);
}
// Create a SOCKET for listening for
// incoming connection requests.
ListenSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (ListenSocket == INVALID_SOCKET)
{
WSACleanup();
exit(1);
}
// The sockaddr_in structure specifies the address family,
// IP address, and port for the socket that is being bound.
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("0.0.0.0");
service.sin_port = htons(2583);
if (bind(ListenSocket,(SOCKADDR *) & service, sizeof (service)) == SOCKET_ERROR)
{
closesocket(ListenSocket);
WSACleanup();
exit(2);
}
return ListenSocket;
}
int main()
{
SOCKET ListenSocket = ServerOn();
SOCKET ClientSocket;
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("10.0.0.2");
service.sin_port = htons(2583);
while(true)
{
if (ClientSocket = accept(ListenSocket, (SOCKADDR*)&service, NULL))
{
std::cout << "New Connection!" << std::endl;
}
}
}
Почему это связано, я ничего не бегал? Может быть, что-то еще пытается подключиться к моему серверу?
Благодарю!
Две вещи: я не думаю, что IP-адрес вашего сервера может быть 0.0.0.0, но вместо этого 10.0.0.2; а также UDP не поддерживает концепцию "принять". Есть только пакеты, и вы можете либо привязать сокет к порту, либо получить пакеты с определенного IP (с recvfrom), либо вы можете получать пакеты от кого-либо, с recv. Последнее будет полезно в случае сервера. Обратите внимание, что вам необходимо вручную отслеживать каждый подключенный клиент с помощью структуры sockaddr_in.
recvfrom
( linux.die.net/man/2/recvmsg ) для UDP,recv
обычно только для TCP