データの受け渡しや解析に問題があります。 特に、私は([符号なし文字] [任意の長さの文字列])をUDP経由で送る必要があります。サーバーはこの情報を解析できるはずです。残念ながら、sscanfを使って私は運がない。助けてください!CでのUDP文字列解析に関する問題
クライアントコード:
char sendline[1000];
sendline[0] = (unsigned char)atoi(argv[3]); // Place Number at start of Buffer
sendline[1] = (' '); // Padding For Parsing
memcpy(&sendline[2], argv[4], sizeof(argv[4])); // Write String into Buffer after space
result = sendto(sockfd,&sendline,(sizeof(sendline)),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
サーバコード:最初の引数は、バイナリエンコードされているので、
の1-:サーバー側のソースコードで
unsigned char test;
char strFirst [500];
char buff[1000];
len = sizeof(cliaddr);
n = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&cliaddr, &len);
buff[n] = '\0'; // Null Terminate
printf("%u %s\n", buff[0], &buff[2]); // Prints Fine
sscanf(buff, "%u %s", &test, &strFirst); // Attempted Parse of Data
printf("%u \n %s \n", test, strFirst);// Prints 0 and (null)
これは、おそらく 'sscanf()'がジョブの適切なツールではないためです。なぜデータが6バイトか10バイトかにかかわらず1000バイトを送信していますか?あなたは 'sizeof(argv [4])'を誤って使用しています。おそらく 'strlen(argv [4]) 'を意味します。データを正しく送信していないため、受信機にチャンスがありませんか?あるいは、コードとして表示しているのは、実際にコードとして使用しているものではないかもしれません。 –
私はテストしていませんが、多分ポインターの問題ですか? so .. sscanf(buff、 "%u%s"、&test、strFirst)? gdbでデバッグしようとするとよいでしょう。 – Sean83
私はあなたからのフィードバックに感謝します。私は自分の携帯電話に書いているので、フォーマットが外れている可能性があります。しかし、ジョナサン、あなたはsizeof()ではなくstrlen()でなければならないという事実は正しいですが、私はテストのためにこれを使っていました。そして、他のユーザーが投稿したとき、あなたが提案したようにsscanf()を使用すべきではないことが判明しました。ありがとう! –