Главная » Статьи » C++ » Статьи по С++

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




UDP протокол
UDP протокол
 

Приступать к передаче данных функциями recvfrom и sendto. Привязка сокета к определённому порту в обоих случаях осуществляется функцией bind.

int lenret;
struct sockaddr_in s_address;
if(sock_out != INVALID_SOCKET) {
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

Протокол  UDP создать сокет для UDP:


socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);  

 

создать сокет для TCP:
socket(PF_INET, SOCK_STREAM, 0);  

 

первый и третий параметры могут варьироваться, но второй параметр должен соответствовать именно тому, что я привёл.

второе главное отличие TCP от UDP состоит в том, что TCP перед началом передачи данных необходимо установить канал связи, для этого он использует такие функции как listen (для ожидающего сервера) и connect (для клиента), а обмен данными осуществяется функциями send и recv. В то время как UDP для передачи данных не требует создания канала связи и поэтому после создания UDP сокета можно сразу приступать к передаче данных функциями recvfrom и sendto.

Привязка сокета к определённому порту в обоих случаях осуществляется функцией bind.

 

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);
 


при этом сокет создаётся следующим образом:

 

BOOL CreateOutgoingSocket(void)
{
struct sockaddr_in srv_address;
int namelen;

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;
}
}
 


тобишь строчка:


srv_address.sin_port = 0; 


означает, чтосистема присобачит сокет на первый же попавшийся свободный порт, а строчки:


s_address.sin_addr.s_addr = inet_addr(szAddr);
s_address.sin_port = htons((WORD)nPort);
 


указывают адрес и порт, на который будет отправлен пакет. Переменные объявлены как

 

int nPort;
const char *szAddr;

Категория: Статьи по С++ | Добавил: c1 (2009 Июнь 16)
Просмотров: 1023 | Теги: UDP протокол | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar