0
目標:データを送受信するUDPソケットを作っています。 私はラップトップでこれをテストしています。そのため、受信メッセージを待ち受けているバックグラウンドでサーバを実行しています。UDPクライアントは受信したデータを2回印刷します。受信データが2回追加される]
問題:サーバーが1つの文字列を受け取り、それがエコーバックすると、クライアントは1つではなく文字列を2回読み込み、不気味さを追加します。これを解決する方法は?コードから
出力は次のとおりです。HelloHello09
[LOLZ、ところで私ALSは09の前にし、その背後に逆さまにしているいくつかのquestionsmarksを得るが、私はそれを貼り付けることはできません]コード:
#define BUFLEN 5
#define PORT 12345
#import <Foundation/Foundation.h>
#define srvr_IP "127.0.0.1"
void errorSig(char *);
int main (int argc, const char * argv[])
{
int sockSend = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in si_other;
char buf[BUFLEN] = "Hello";
char bufrec[BUFLEN];
@autoreleasepool {
si_other.sin_family = AF_INET;
si_other.sin_port = htons(PORT);
inet_pton(AF_INET, srvr_IP, &si_other.sin_addr);
memset(&si_other.sin_zero, 0, sizeof(si_other.sin_zero));
int size = sizeof(si_other);
sendto(sockSend, buf, BUFLEN, 0,
(struct sockaddr *)&si_other, size);
recvfrom(sockSend, bufrec, BUFLEN, 0, (struct sockaddr *)&si_other, (unsigned int*)&size);
NSString *test = [[NSString alloc]initWithUTF8String:bufrec];
NSLog(@" data is: %@", test);
close(sockSend);
}
return 0;
}
これは私にとっては 'C'のようには見えないのですか? – Nick
@Nickは何を言った。これらの "@autoreleasepool"と "[NSString alloc]"は何ですか?推測では、問題は文字列がNULL終端されているかどうかと関係がありますが、bufとbufrecがメモリ内で隣接していることがよく分かります。それらの間にギャップがなく、ヌル終端文字がない場合は、両方とも一緒に印刷されています。 BUFLENとは何か、それ以上の情報なしでは言い表せません。 – Vicky