Oops 0 8 сентября, 2010 Опубликовано 8 сентября, 2010 · Жалоба Здравствуйте!!! Разбираюсь с интернет сокетами в Linux. Пишу программку UDP сервер. Открывать UDP сокет и принимать данные научился. Вот только не знаю как узнавать длину входящего пакета данных, IP и PORT источника (того кто отправил этот пакет). Подскажите как это делается? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
suprun 0 11 сентября, 2010 Опубликовано 11 сентября, 2010 · Жалоба Надеюсь статья поможет http://www.programmersheaven.com/mb/CandCP...struct-hostent/ :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bux 0 13 сентября, 2010 Опубликовано 13 сентября, 2010 · Жалоба int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oops 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Разобрался, вот пример UDP server'a #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #define SOCK_NAME "socket.soc" #define BUF_SIZE 256 int main(int argc, char ** argv) { struct sockaddr srvr_name, rcvr_name; char buf[BUF_SIZE]; int sock; int namelen, bytes; sock = socket(AF_UNIX, SOCK_DGRAM, 0); if (sock < 0) { perror("socket failed"); return EXIT_FAILURE; } srvr_name.sa_family = AF_UNIX; strcpy(srvr_name.sa_data, SOCK_NAME); if (bind(sock, &srvr_name, strlen(srvr_name.sa_data) + sizeof(srvr_name.sa_family)) < 0) { perror("bind failed"); return EXIT_FAILURE; } bytes = recvfrom(sock, buf, sizeof(buf), 0, &rcvr_name, &namelen); if (bytes < 0) { perror("recvfrom failed"); return EXIT_FAILURE; } buf[bytes] = 0; rcvr_name.sa_data[namelen] = 0; printf("Client sent: %s\n", buf); close(sock); unlink(SOCK_NAME); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться