【问题标题】:Send chars with UDP使用 UDP 发送字符
【发布时间】:2011-05-10 03:17:16
【问题描述】:

我正在尝试使用 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, &c, sizeof(char), 0, (struct sockaddr *)&ServAddr, sizeof(ServAddr));
     }
}

raspunsLen=recvfrom(sock, raspuns, SIRMAX, 0,(struct sockaddr *) &fromAddr, &fromSize);
raspuns[raspunsLen] = '\0';
printf("%s",raspuns);

这就是服务器:

for (;;) 
{
    cliAddrLen = sizeof(ClntAddr); 
    while(sir != '0')
    { 
      recvfrom(sock, &sir, sizeof(char), 0,(struct sockaddr *) &ClntAddr, &cliAddrLen);
      raspuns[i]=sir;
      printf("%c",sir);
    }
    raspunsMsgSize=strlen(raspuns); 
    sendto(sock, raspuns, raspunsMsgSize, 0, (struct sockaddr *) &ClntAddr,             sizeof(ClntAddr));
}

当我发送整段文本时它可以工作,但这样服务器似乎没有收到任何内容。希望有人可以提供帮助。 谢谢你。

【问题讨论】:

  • 一个快速的建议,永远不要使用 UDP 作为发送机制,在这种机制中你需要在数据包中发送单个字符。因为 UDP 不是一个可靠的协议,你永远不会知道之后会发生什么。如果是这种情况,您必须使用 tcp 协议。
  • 您的代码最后需要“0”,但我没有看到您发送它 - 除非它是用户输入的字符串的一部分。事实上,您可能指的是 0,如“所有位都清除的字节”,但您也不发送。尝试输入“CS 101”作为输入字符串。
  • 服务器部分sir的声明是什么?
  • @maheshgupta024 我知道这不可靠,但我必须分别发送每个字符。再次,我知道这将是您使用 TCP 会做的事情,但这就是我被要求这样做的方式.不知道为什么。学校项目。
  • @Mark Wilkins 是char sir='1';

标签: c udp chars


【解决方案1】:

我怀疑:

while(sir != '0')

应该是:

while(sir != 0)

或者可能:

while( * sir != 0 )

但实际上,您没有发布足够的代码来确定。

【讨论】:

  • 我感觉它不是*sir,它是一个正常的变量,你看他在其他调用中也使用了sir变量的地址。在我看来这是因为不可靠的udp协议。
  • 很抱歉没有发布整个代码。它会占用很多空间。正如我所说,该程序适用于发送字符串,但不适用于字符。也许我会坚持发送字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2014-08-24
  • 2016-12-14
  • 2018-09-06
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
相关资源
最近更新 更多