【发布时间】: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';