Отправка символов с помощью UDP

#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. Я сожалею, что не опубликовал весь код целиком. Это заняло бы много места. Как я уже сказал, программа работает с отправкой строк, но не с символами. Может быть, я просто буду продолжать посылать строки.