Ошибка Отправки Байта По Протоколу Udp

Тема в разделе "Общие вопросы по С и С++", создана пользователем Valimor, 19 сен 2014.

  1. Valimor

    Valimor Well-Known Member

    Регистрация:
    10 апр 2010
    Сообщения:
    45
    Симпатии:
    0
    пробую написать сервер работающий с протоколом UDP который получает от клиента 2 числа считает их сумму и результат отправляет обратно. Вот код:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Сервер</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    #include <winsock2.h>
    #include <wininet.h>
    #include <winnetwk.h>
    #include <iostream>
    #include <sys/types.h>
    #include <stdio.h>
    #include <sys/time.h>
    #include <errno.h>
    #include <ws2tcpip.h>

    using namespace std;

    int main()
    {
    setlocale(LC_ALL,"RUS");

    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested=MAKEWORD(2,2);
    WSAStartup(wVersionRequested,&wsaData);

    struct sockaddr_in local;
    struct sockaddr_in client;
    int rc;
    char buf[1];
    int x,y,sum;

    SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    if(s<0)
    cout<<"Сокета тютю"<<endl;

    local.sin_family=AF_INET;
    local.sin_port=htons(8020);
    local.sin_addr.s_addr=INADDR_ANY;
    client.sin_family=AF_INET;
    client.sin_port=htons(8020);
    int clientlen=sizeof(client);
    //ca=&client;
    //sa=&local;
    rc=bind(s,(struct sockaddr*)&local,sizeof(local));
    if(rc<0)
    {
    cout<<"Ошибка вызова bind"<<endl;
    }
    else
    cout<<"Инициализация bind прошла успешно"<<endl;

    rc=recvfrom(s,buf,1,0,(struct sockaddr*)&client, &clientlen);//получаем первое число
    if(rc<0)
    cout<<"Ошибка вызова recv1"<<endl;
    else
    cout<<"Принят "<<rc<<" байт"<<endl;
    cout<<"Символ ->"<<buf[0]<<endl;
    x=atoi(buf);
    cout<<"Число ->"<<x<<endl;
    rc=recvfrom(s,buf,1,0,( struct sockaddr * )&client, &clientlen);//получаем второе число
    if(recv<0)
    cout<<"Ошибка вызова recv2";
    else
    cout<<"Принят "<<rc<<" байт"<<endl;
    cout<<"Символ ->"<<buf[0]<<endl;
    y=atoi(buf);
    cout<<"Число ->"<<y<<endl;
    sum=x+y;                              //суммируем
    cout<<"Полученная сумма "<<sum<<endl;
    sprintf(buf,"%i",sum);
    cout<<"Полученная сумма в символе "<<buf<<endl;
    rc=sendto(s,buf,1,0,( struct sockaddr * )&client, sizeof(client));//должен отправить здесь, но не отправляет
    if(rc<0)
    cout<<"Ошибка вызова sendto "<<endl;
    //}
    system("pause");
    cout << "Hello world!" << endl;
    closesocket(s);
    WSACleanup();
    return 0;
    }
    Сервер запускается без ошибок принимает данные( 2 числа ) считает сумму, но не отправляет, выдает ошибку. не могу понять почему
    [​IMG]
     
  2. Valimor

    Valimor Well-Known Member

    Регистрация:
    10 апр 2010
    Сообщения:
    45
    Симпатии:
    0
    WSAGetLastError() возвращает 10047
     
Загрузка...

Поделиться этой страницей