Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Сокеты Беркли - Пример клиента и сервера, использующие 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; } Просмотров: 8615
|