2011-05-09 69 views
2

我想用UDP发送文本,通过分别发送每个字符,但有些东西似乎是错误的。 这是客户:用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)); 
} 

它工作时,我发短信,但这样的服务器似乎并没有被接受任何的整件。希望有人能帮忙。 谢谢。

+1

你的代码最后需要'0',但我没有看到你发送它 - 除非它是用户输入的字符串的一部分。实际上,你可能意味着0,如“所有位的字节清楚“,但你也不会发送。尝试输入,例如“CS 101”作为输入字符串。 – Arkadiy 2011-05-09 19:24:07

+0

什么是在服务器部分的'sir'声明? – 2011-05-09 19:28:37

+0

一个简单的建议,从不使用UDP发送机制,在这个机制中你有个别字符要发送到一个包中。因为UDP不是一个可靠的协议,你永远不会知道什么是什么。如果是这种情况,你必须使用tcp协议。 – maheshgupta024 2011-05-09 19:17:05

回答

1

我怀疑:

while(sir != '0') 

应该是:

while(sir != 0) 

或可能:

while(* sir != 0) 

不过说真的,你有没有足够的发布代码以确保万无一失。

+0

我觉得它不是*先生,这是一个正常的变量,你看他在其他调用中也使用了先生变量的地址。根据我的观点,这是因为udp协议不可靠。 – maheshgupta024 2011-05-09 19:18:30

+0

我很抱歉没有发布整个代码。它会占用很多空间。正如我所说的,该程序适用于发送字符串,但不适用于字符。也许我会坚持发送字符串。 – Vidi 2011-05-09 19:57:52