соедините Ошибку функции 10047 (winsock2)

Таким образом, я скопировал некоторый тестовый код с места MSDN, которое использует основные функции гнезда окон. Вот код:

#include "stdafx.h"

#ifndef UNICODE
#define UNICODE
#endif

#include 
#include 
#include 
#include 


int main()
{

    int iResult = 0;

    //----------------------
   //Initialize Winsock
    WSADATA wsaData;
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) {
        wprintf(L"WSAStartup function failed with error: %d\n", iResult);
        return 1;
    }
    //----------------------
   //Create a SOCKET for connecting to server
    SOCKET ConnectSocket;
    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ConnectSocket == INVALID_SOCKET) {
        wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }
    //----------------------
   //The sockaddr_in structure specifies the address family,
   //IP address, and port of the server to be connected to.

    int I = sizeof(sockaddr_in);
        sockaddr_in clientService;
    clientService.sin_family = AF_INET;     
        clientService.sin_port = htons(5000);
    in_addr *s = (in_addr*)malloc(sizeof(in_addr));
    s->s_addr = inet_addr("127.0.0.1");
    clientService.sin_addr = (in_addr_t)s;

    iResult = connect(ConnectSocket, (sockaddr*)&clientService,I);
    if (iResult == SOCKET_ERROR) {
        wprintf(L"connect function failed with error: %ld\n", WSAGetLastError());
        iResult = closesocket(ConnectSocket);
        if (iResult == SOCKET_ERROR)
            wprintf(L"closesocket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }

    wprintf(L"Connected to server.\n");

    iResult = closesocket(ConnectSocket);
    if (iResult == SOCKET_ERROR) {
        wprintf(L"closesocket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }

    WSACleanup();
    return 0;
}

Кодекс собирает очень хорошо. Но когда я управляю программой отображения на экране командной строки следующее сообщение об ошибке:

связь прервалась с ошибкой: 10047

Теперь я знаю, что Ошибка 10047 указывает на ошибку в структуре адреса. Я пытался использовать inet_pto n, но это приводит к ошибке сегмента (нарушение доступа к памяти), поскольку inet_pton использует memcpy функция. Таким образом, что продолжается здесь? , соединяют функция, неправильно осуществленная? Возможно, есть другой способ определить структуру адреса.

2
nl ja de
- соединить функция, неправильно осуществленная? - Нет.
добавлено автор GSerg, источник
- соединить функция, неправильно осуществленная? - Нет.
добавлено автор GSerg, источник

4 ответы

From MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625%28v=vs.85%29.aspx

sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
clientService.sin_port = htons(27015);

Походит на ваше урегулирование .sin_addr.s_addr неоднозначным способом.

Если это оказывается вышеупомянутым, не проблема, то, возможно, у вас есть протоколы IP6, превращенные на, но № IP4, который был бы, почему AF_NET терпит неудачу и требуемый AF_NET6.

1
добавлено
Таким образом, как я включаю протоколы IP4 и отключаю протоколы IP6?
добавлено автор Mr X, источник
LastCoder, I' m использующий windows7.
добавлено автор Mr X, источник
@Mr X - Определенно, это зависит от какой операционная система you' использование ре. Но обычно параметры настройки находятся в ваших сетевых параметрах настройки / свойства.
добавлено автор Louis Ricci, источник

From MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625%28v=vs.85%29.aspx

sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
clientService.sin_port = htons(27015);

Походит на ваше урегулирование .sin_addr.s_addr неоднозначным способом.

Если это оказывается вышеупомянутым, не проблема, то, возможно, у вас есть протоколы IP6, превращенные на, но № IP4, который был бы, почему AF_NET терпит неудачу и требуемый AF_NET6.

1
добавлено
Таким образом, как я включаю протоколы IP4 и отключаю протоколы IP6?
добавлено автор Mr X, источник
LastCoder, I' m использующий windows7.
добавлено автор Mr X, источник
@Mr X - Определенно, это зависит от какой операционная система you' использование ре. Но обычно параметры настройки находятся в ваших сетевых параметрах настройки / свойства.
добавлено автор Louis Ricci, источник

В вашем случае проблема - эта линия здесь:

clientService.sin_addr = (in_addr_t)s;

Вы назначаете in_addr указатель на объект in_addr. Dereference указатель как так (также отмечают, что, если вы удаляете бросок, компилятор поймает проблему:

clientService.sin_addr = *s;

Подход LastCoder был бы легче, все же. Нет никакой причины malloc() отдельная in_addr структура только, чтобы скопировать его.

0
добавлено

В вашем случае проблема - эта линия здесь:

clientService.sin_addr = (in_addr_t)s;

Вы назначаете in_addr указатель на объект in_addr. Dereference указатель как так (также отмечают, что, если вы удаляете бросок, компилятор поймает проблему:

clientService.sin_addr = *s;

Подход LastCoder был бы легче, все же. Нет никакой причины malloc() отдельная in_addr структура только, чтобы скопировать его.

0
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest