Я пытаюсь реализовать базовый протокол передачи файлов, используя UDP.Я использую Beej's Guide в качестве ссылки, и большая часть кода, который я опубликую, оттуда.
В моей программе «говорящий» до сих пор отправляет имя нужного файла «получателю».
Оттуда получатель проверяет, существует ли файл, и, если это так, вычисляет размер файла.
Теперь я столкнулся с проблемами.Мне нужен приемник, чтобы отправить размер файла говорящему.Вы можете увидеть в моем коде (ссылки ниже), как я это реализовал.Тем не менее, говорящий просто зависает, как будто он все еще ждет, чтобы что-то было отправлено.
Это заставляет меня думать, что получателю нужен какой-то дополнительный код, чтобы позволить ему возвращаться к говорящему, а не просто получать от него данные (я привык к TCP, так что извините за недостаток знаний).
Может кто-нибудь сказать мне, какой код мне не хватает, или я неправильно использую функции?Трудно следовать руководству Биджа, и он не приводит пример двусторонней связи.
Спасибо, и дайте мне знать, если вам нужна дополнительная информация.
Слушатель: http://pastebin.com/UL1xjDnP
Говорящий: http://pastebin.com/B2zrXPgZ
РЕДАКТИРОВАТЬ: Решено!Благодаря cnicutar,
я обращался к серверу в этом коде, когда я должен был обратиться к клиенту
if ((numbytes = sendto(sockfd,buffer,strlen(buffer), 0,
p->ai_addr, p->ai_addrlen)) == -1)
, который следует изменить на
if ((numbytes = sendto(sockfd,buffer,strlen(buffer), 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1)