TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Шрифт:
4. getsockname(sockMain, &servAddr, &length);
Использовать getsockname, чтобы извлечь присвоенный socket порт.
5. msgLength = recvfrom(sockMain, buf, BUFLEN, 0, &clientAddr, &length);
Вызов recvfrom имеет форму:
Флаги позволяют вызывающей стороне просмотреть сообщение без его фактического получения.
6. inet_ntoa(clientAddr.sin_addr);
Этот вызов преобразует 32-разрядный адрес Интернета клиента в знакомую нам нотацию этого адреса с точками и десятичными значениями.
21.11 Клиентская программа UDP
Клиент соединяется с сервером, посылает одно сообщение и закрывает соединение. При запуске программы конечный пользователь должен ввести имя хоста, порт сервера и отправляемое на сервер сообщение. Например:
21.11.1 Запросы в клиентской программе UDP
1. sock = socket(AF_INET, SOCK_DGRAM, 0); UDP клиента создает socket для UDP.
2. bzero((char *)&servAddr, sizeof(servAddr));
servAddr.sin_family = AF_INET;
hp = gethostbyname(argv[1]);
bcopy(hp->h_addr, &servAddr.sin_addr, hp->length);
servAddr.sin_port = htons(atoi(argv[2]));
Структура servAddr заполнена введенными конечным пользователем значениями, как это делалось и в клиенте для TCP.
3. bind (sock, &clientAddr, sizeof(clientAddr)); Клиент вызывает bind для получения порта.
- Telegram
- Viber
- Skype
- ВКонтакте