#c #udp #chars
Вопрос:
Я пытаюсь отправить текст с помощью UDP, отправляя каждый символ отдельно, но, похоже, что-то не так. Это клиент:
while(strcmp(sir,"0")!=0)
{
printf("Text number %d:", i);
i ;
scanf("%s",sir);
printf("n");
sirLen=strlen(sir);
for(j=0;j<sirLen;j )
{ c=sir[j];
printf("%c",c);
sendto(sock, amp;c, sizeof(char), 0, (struct sockaddr *)amp;ServAddr, sizeof(ServAddr));
}
}
raspunsLen=recvfrom(sock, raspuns, SIRMAX, 0,(struct sockaddr *) amp;fromAddr, amp;fromSize);
raspuns[raspunsLen] = '';
printf("%s",raspuns);
И это будет сервер:
for (;;)
{
cliAddrLen = sizeof(ClntAddr);
while(sir != '0')
{
recvfrom(sock, amp;sir, sizeof(char), 0,(struct sockaddr *) amp;ClntAddr, amp;cliAddrLen);
raspuns[i]=sir;
printf("%c",sir);
}
raspunsMsgSize=strlen(raspuns);
sendto(sock, raspuns, raspunsMsgSize, 0, (struct sockaddr *) amp;ClntAddr, sizeof(ClntAddr));
}
Это работает, когда я отправляю целые фрагменты текста, но таким образом сервер, похоже, ничего не получает. Надеюсь, кто-нибудь сможет помочь.
Спасибо.
Комментарии:
1. Одно краткое предложение: никогда не используйте UDP для механизма отправки, где у вас есть отдельный символ, который нужно отправить в пакете. Потому что UDP не является надежным протоколом, и вы никогда не узнаете, что будет после чего. В этом случае вам придется использовать протокол tcp.
2. Ваш код ожидает «0» в конце, но я не вижу, чтобы вы отправляли его — если только это не часть строки, которую вводит пользователь. На самом деле, вы, вероятно, имели в виду 0, как в «байт со всеми битами», но вы и это не отправляете. Попробуйте ввести, скажем, «CS 101» в качестве входной строки.
3. Что такое объявление
sir
в серверной части?4. @maheshgupta024 Я знаю, что это ненадежно, но я должен отправить каждый символ отдельно. Опять же, я знаю, что это было бы то, что вы сделали бы с помощью TCP, но именно так меня просят это сделать. Не знаю почему.школьный проект.
5. @Это Марк Уилкинс
char sir='1';
Ответ №1:
Я подозреваю:
while(sir != '0')
должно быть:
while(sir != 0)
или, возможно,:
while( * sir != 0 )
Но на самом деле вы опубликовали недостаточно кода, чтобы быть уверенным.
Комментарии:
1. Я чувствую, что это не *сэр, это обычная переменная, вы видите, что он использовал адрес переменной sir и в других вызовах.. По моему мнению, это из-за ненадежного протокола udp.
2. Я сожалею, что не опубликовал весь код целиком. Это заняло бы много места. Как я уже сказал, программа работает с отправкой строк, но не с символами. Может быть, я просто буду продолжать посылать строки.