Я пытаюсь настроить простое соединение с серверным приложением, работающим на том же компьютере, что и клиент.
Мой код выглядит так:
void Base::Connect(string ip, string port)
{
int status;
SOCKET ConnectSocket = INVALID_SOCKET;
struct addrinfo hints;
struct addrinfo *servinfo; // will point to the results
memset(&hints, 0, sizeof hints); // make sure the struct is empty
hints.ai_family = AF_UNSPEC; // don't care IPv4 or IPv6
hints.ai_socktype = SOCK_STREAM; // TCP stream sockets
// get ready to connect
status = getaddrinfo(ip.c_str(), port.c_str(), &hints, &servinfo);
// Socket Setup
if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET)
{
printf("[NETWORKING] An error occured when setting up socket\n");
}
// Connect
if (connect(ConnectSocket, servinfo->ai_addr, (int)servinfo->ai_addrlen) == SOCKET_ERROR)
{
int error = WSAGetLastError();
printf("Connect error: ", error);
}
}
Заранее звоню WSAStartup()
и это не выдает никаких ошибок. Если сервер включен или выключен, ошибка не меняется.
Я использую IP-адрес 127.0.0.1, и я подключаюсь через порт 80. Я пробовал что-то еще (1337), которое выдало мне ту же ошибку.
Что-то явно не так? Любые идеи о том, что может пойти не так?
if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET)
Вы сравниваете сокет (…) с INVALID_SOCKET
и затем вы назначаете результат true / false для ConnectSocket.
использование
if ((ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == INVALID_SOCKET)
Смотрите списки приоритетов операторов C ++
Других решений пока нет …