UDP Socket на Си
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
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-ой час парюсь !!!
|
|
|
RE: UDP Socket на Си - 2007-06-23 12:17:02.710000
|
|
|
Kill_em_all
Сообщений: 395
Оценки: 0
Присоединился: 2005-03-25 22:40:01
|
А что кричит? Правильно кричит. sock_out глобальной сделай
|
|
|
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) }
|
|
|
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); }
|
|
|
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));
|
|
|
RE: UDP Socket на Си - 2007-06-23 19:09:33.876666
|
|
|
Vsoft
Сообщений: 7
Оценки: 0
Присоединился: 2007-01-29 21:07:31.226666
|
Я недавно начал писать на Си , так что касяки есть и будут ближаёший месяц
|
|
|
|
|