0

問題があります。クライアントサーバーのUDPがあります。サーバー側では、ロボットの動きを制御するためにクライアント側からデータにアクセスする必要があります。実験では、データの値が1の場合に「oke」を出力するために使用します。ここでコードプログラムは次のとおりです。

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h>
#define MYPORT 4950
#define MAXBUFLEN 100
int sockfd;
struct sockaddr_in my_addr; 
struct sockaddr_in their_addr; 
struct hostent *he;
int addr_len, numbytes;
char dt[30];
char buf[MAXBUFLEN];
int main() 
{
printf("‐‐‐‐‐ PROGRAM CHATTING ‐‐‐‐‐\n");

if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){
    perror("socket");
    exit(1); }

my_addr.sin_family = AF_INET; 
my_addr.sin_port = htons(MYPORT); 
my_addr.sin_addr.s_addr = INADDR_ANY; 
memset(&(my_addr.sin_zero),'\0',8);

if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1){
    perror("bind");
    exit(1); }


while(1){
    addr_len = sizeof(struct sockaddr);
    if((numbytes=recvfrom(sockfd,buf,MAXBUFLEN-1,0,(struct sockaddr *)&their_addr,&addr_len))==-1)
    {
        perror("recvfrom");
        exit(1);}

    buf[numbytes]='\0';
    printf("%s : \"%s\"\n", inet_ntoa(their_addr.sin_addr), buf);

    if (buf[0]==1)
    { printf("oke\n");}

    printf("Me : ");
    scanf("%s", dt); 
    if((numbytes=sendto(sockfd,dt,strlen(dt),0,(struct sockaddr*)&their_addr,sizeof(struct sockaddr)))==-1)
    {
        perror("sendto");
        exit(1); 
    }

}
close(sockfd);
return 0;
}

クライアント側に「1」を入れると、結果は次のようになります。

 ‐‐‐‐‐ PROGRAM CHATTING ‐‐‐‐‐
 130.130.66.76 : "1"
 Me :

プログラムにもあります:

if (buf[0]==1)
{ printf("oke\n");}

プログラムがifの内部にアクセスできないのはなぜですか?

4

1 に答える 1

1

試すif (buf[0]=='1')

数字の文字は、数字とは異なるASCII値にマップされるため、たとえば、'1'==49

于 2012-12-17T20:49:29.700 に答える