Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

UDP Socket на Си

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> UDP Socket на Си
Имя
Сообщение << Старые топики   Новые топики >>
UDP Socket на Си - 2007-06-23 01:41:42.460000   
stasww

Сообщений: 71
Оценки: 0
Присоединился: 2007-03-02 20:15:34.900000
Запарился дэбажить …. прошу помощи :) (Надыбал куски кода по работе с удпи сокетом на Си , вот терь собираю во едино .. кароче хэлп)

Вот оно !

#include <winsock.h>
BOOL CreateOutgoingSocket(void)
{
struct sockaddr_in srv_address;
int namelen;

SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sock_out != INVALID_SOCKET)
{
memset(&srv_address,0,sizeof(SOCKADDR_IN));
srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
srv_address.sin_family = AF_INET;
srv_address.sin_port = 0;
}
if(bind(sock_out, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) {
closesocket(sock_out);
return FALSE;
} else
{
namelen=sizeof(SOCKADDR_IN);
getsockname(sock_out,(SOCKADDR *)&srv_address,&namelen);
return TRUE;
}
}

int lenret;
struct sockaddr_in s_address;
if(sock_out != INVALID_SOCKET) // на эту строку кричит кампилятор
{
memset(&s_address,0,sizeof(SOCKADDR_IN));
s_address.sin_family = AF_INET;
s_address.sin_addr.s_addr = inet_addr(szAddr);
s_address.sin_port = htons((WORD)nPort);
}


Блин надо'ж глобалиных переменных опозначить )))) 2-ой час парюсь !!!
Post #: 1
RE: UDP Socket на Си - 2007-06-23 12:17:02.710000   
Kill_em_all

Сообщений: 395
Оценки: 0
Присоединился: 2005-03-25 22:40:01
А что кричит?


Правильно кричит. sock_out глобальной сделай
Post #: 2
RE: UDP Socket на Си - 2007-06-23 12:25:32.056666   
stasww

Сообщений: 71
Оценки: 0
Присоединился: 2007-03-02 20:15:34.900000
Подшаманил ….. кричит но только на одну строку

#include <winsock.h>
BOOL CreateOutgoingSocket(void)
{
int nPort;
const char *szAddr;

struct sockaddr_in srv_address;
int namelen;
SOCKET sock_out = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sock_out != INVALID_SOCKET)
{
memset(&srv_address,0,sizeof(SOCKADDR_IN));
srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
srv_address.sin_family = AF_INET;
srv_address.sin_port = 0;
}
if(bind(sock_out, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
{
closesocket(sock_out);
return FALSE;
}
else
{
namelen=sizeof(SOCKADDR_IN);
getsockname(sock_out,(SOCKADDR *)&srv_address,&namelen);
return TRUE;
}

int lenret;
struct sockaddr_in s_address;
if(sock_out != INVALID_SOCKET)
{
memset(&s_address,0,sizeof(SOCKADDR_IN));
s_address.sin_family = AF_INET;
s_address.sin_addr.s_addr = inet_addr(szAddr);
s_address.sin_port = htons((WORD)nPort);
}

lenret=sendto(sock_out,(char *)buf,nDataLen+sizeof(UDPHDR),0,(SOCKADDR *)&(s_address),sizeof(SOCKADDR_IN));
free(buf);//ругается на эту строку , а в частности на : buf,nDataLen+sizeof(UDPHDR)
}
Post #: 3
RE: UDP Socket на Си - 2007-06-23 13:11:25.820000   
stasww

Сообщений: 71
Оценки: 0
Присоединился: 2007-03-02 20:15:34.900000
Вот правильный вариант !

#include <winsock.h>

#pragma comment(lib, "ws2_32.lib")

int main()
{
int nPort;
const char *szAddr;

struct sockaddr_in srv_address;
int namelen;
SOCKET sock_out = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sock_out != INVALID_SOCKET)
{
memset(&srv_address,0,sizeof(SOCKADDR_IN));
srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
srv_address.sin_family = AF_INET;
srv_address.sin_port = 2256;
}
if(bind(sock_out, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
{
closesocket(sock_out);
return FALSE;
}
else
{
namelen=sizeof(SOCKADDR_IN);
getsockname(sock_out,(SOCKADDR *)&srv_address,&namelen);
return TRUE;
}

int lenret;
struct sockaddr_in s_address;
if(sock_out != INVALID_SOCKET)
{
memset(&s_address,0,sizeof(SOCKADDR_IN));
s_address.sin_family = AF_INET;
s_address.sin_addr.s_addr = inet_addr(szAddr);
s_address.sin_port = htons((WORD)nPort);
}

char *buf = new char;
int nDataLen = sizeof(buf);


lenret=sendto(sock_out,(char *)buf,nDataLen,0,(SOCKADDR *)&(s_address),sizeof(SOCKADDR_IN));
free(buf);
}
Post #: 4
RE: UDP Socket на Си - 2007-06-23 13:49:06.040000   
Kill_em_all

Сообщений: 395
Оценки: 0
Присоединился: 2005-03-25 22:40:01
Маладец

А зачем в тот раз размер заголовка UDP добавлял?

Как вариант
lenret=sendto(sock_out,(char *)buf,sizeof(buf),0,(SOCKADDR *)&(s_address),sizeof(SOCKADDR_IN));
Post #: 5
RE: UDP Socket на Си - 2007-06-23 19:09:33.876666   
Vsoft

Сообщений: 7
Оценки: 0
Присоединился: 2007-01-29 21:07:31.226666
Я недавно начал писать на Си , так что касяки есть и будут ближаёший месяц
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> UDP Socket на Си







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.