Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Сокеты Беркли - Пример клиента и сервера, использующие UDP23 января 2011Оглавление: 1. Сокеты Беркли 2. Интерфейс сокета Беркли 3. Заголовочные файлы 4. Функции 5. Дополнительные параметры для сокетов 6. Передача данных 7. Пример клиента и сервера, использующих TCP 8. Пример клиента и сервера, использующие UDP UDP основывается на протоколе без установления соединений, то есть протокол, не гарантирующий доставку информации. UDP-пакеты могут приходить не в указанном порядке, дублироваться и приходить более одного раза, или даже не доходить до адресата вовсе. Из-за этих минимальных гарантий, UDP значительно уступает протоколу TCP. Отсутствие установки соединений означает отсутствие потоков или соединений между двумя хостами, так как вместо этого данные прибывают в датаграммах. Адресное пространство UDP, область номеров UDP-портов полностью отделены от TCP-портов. СерверКод может создавать UDP-сервер на порту 7654 следующим образом: int sock = socket; struct sockaddr_in sa; int bound; ssize_t recsize; socklen_t *address_len=NULL; sa.sin_addr.s_addr = INADDR_ANY; sa.sin_port = htons; bound = bind&sa, sizeof ); if fprintf: ошибка %s\n", strerror ); bind связывает сокет с парой адрес/порт.
while
{
printf;
recsize = recvfromHz, 100, 0, &sa, address_len );
if
fprintf );
printf;
sleep;
printf;
}
Такой бесконечный цикл получает все UDP-датаграммы, приходящие на порт 7654, при помощи recvfrom. Функция использует параметры:
КлиентПростейшая демонстрация отправки UDP-пакета, содержащего «Привет!» на адрес 127.0.0.1 порт 7654 выглядит примерно так:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h> /* для вызова close для сокета */
int main
{
int sock;
struct sockaddr_in sa;
int bytes_sent;
const char* buffer = "Привет!";
int buffer_length;
buffer_length = strlen + 1;
sock = socket;
if
{
printf;
return 0;
}
sa.sin_family = PF_INET;
sa.sin_addr.s_addr = htonl;
sa.sin_port = htons;
bytes_sent =
sendto(
sock,
buffer,
strlen + 1,
0,
&sa,
sizeof
);
if
printf );
close;
return 0;
}
Просмотров: 9686
|