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

Valimor

Well-Known Member
10.04.2010
45
0
#1
пробую написать сервер работающий с протоколом 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 числа ) считает сумму, но не отправляет, выдает ошибку. не могу понять почему