为什么这个循环出不去?
从客户端的stdin输入string,如果string的前八位是"11001100",服务端就发回"123456“到客户端的stdout,如果不是"11001100",就提示错误,问题函数的源码:
void dg_echo (int sockfd, SA * pcliaddr, socklen_t clilen)
{
int m, n;
socklen_t len;
char mesg[MAXLINE];
char *recvhead = "11001100"; /* hlr code */
char mesgsend[10];
char *string1 = "123456";
for (;;)
{
len = clilen;
n = Recvfrom (sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
m = strncmp (mesg, recvhead, 8);
if ((n > 8) && (m == 0))
{
strncpy (mesgsend, string1, 6);
Sendto (sockfd, mesgsend, strlen (mesgsend), 0, pcliaddr, len);
}
else
{
fprintf (stderr, "Wrong Number\n");
continue;
}
}
}
可是现在输"0000"到"Wrong Number"后再输"11001100"打头的string也没反应了,为什么出不去'else 循环'了?
问题点数:60、回复次数:12Top
1 楼darkwing()回复于 2000-10-05 08:48:00 得分 0
string?
你一次读入8个字符的要求未被满足
Top
2 楼fishworm(胖子)回复于 2000-10-05 22:50:00 得分 0
将continue改为break.Top
3 楼liujunseco(椅子)回复于 2000-10-06 09:45:00 得分 0
不能改成break,我还要继续发消息呢!Top
4 楼Maxwell(不可知)回复于 2000-10-10 16:23:00 得分 0
该复位的变量没有复位.出错后得把环境恢复到初始状态.
Top
5 楼longjack(阿建)回复于 2000-10-12 10:28:00 得分 60
代碼改進;
(1)建議在 n=Recvfrom(...); 後檢查n的值以確定是否有網路傳輸錯誤發生.
(2)fprintf(stderr,"Wrong Number\n");後的 continue;沒有必要吧?
Top
6 楼softsprite(软件精灵)回复于 2000-10-14 00:50:00 得分 0
n > 8 改为 n >= 8Top
7 楼CoolHg(苦听)回复于 2000-10-14 12:42:00 得分 0
else体内没问题,主要可能出在以下几方面
1。第一次输入00000不满8位,所以输出"Wrong Number"其实是在你输入了1100001010并发送后的事
2。n>8改为n>=8(其实这里根本用不着判断收到的长短)
3。对于mesg[maxline]最好改为mesg[maxline+1],字符串后还要一个'\0'才不会出问题,当然你这里要不要都无所谓Top
8 楼liujunseco(椅子)回复于 2000-10-15 11:19:00 得分 0
谢谢,如longjack兄说的,把continue改为return 就可以了,coolHg兄也给我很大启发,还有各位大侠,在此一并感谢,多谢!Top




