この文字列が動的に作成されたとき(コード内の別の変数の値と同じ値に設定したとき)、UDPパケットで送信している文字列の受信に問題があります。これとは異なり、この文字列の作成時に文字列に定数値を設定した場合、この問題は発生しません。文字列を送信するために使用する方法は次のとおりです。
- (void) sendUDPMessage {
int sockfd;
struct sockaddr_in server_addr;
char myBroad[]="255.255.255.255";
struct hostent *hptr = gethostbyname(myBroad);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&server_addr, sizeof(struct in_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(15000);
server_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
memcpy(&server_addr.sin_addr, hptr->h_addr_list[0], sizeof(struct in_addr));
int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(int));
NSString *string = [NSString stringWithFormat:@"%@ %@",user.name,user.surname];
sendto(sockfd, &string, sizeof(string), 0, (struct sockaddr*)&server_addr, sizeof server_addr);
NSLog(@"message sent : %@",string);
}
そしてこれはudpパケットを受信するための方法です:
- (void) server {
int serverfd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
serverfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(15000);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(serverfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr_in));
socklen_t clisize = sizeof(struct sockaddr_in);
bzero(&client_addr, clisize);
while (1) {
NSString *string=@"";
NSLog(@"wainting for messages");
recvfrom(serverfd, &string, 200, 0, (struct sockaddr *) &sin, &clisize);
NSLog(@"message received : %@",string);
}
}
NSStringを定義すると*string= @ "hello!"; 文字列の内容を正しく受け取ることができます。NSObjectを送信しようとすると、同じ問題が発生します。私は何が欠けていますか?ありがとう!