0

UDPソケットを作成し、以下のコードで既存のサーバーに送信しようとしています。

struct sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(servAddr));  
servAddr.sin_family = AF_INET;              
servAddr.sin_addr.s_addr = inet_addr(SERVER IP ADDRESS GOES HERE);
servAddr.sin_port   = htons(port);

int testSock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

unsigned char byteData;
int sent;
unsigned int servSize = sizeof(servAddr);

if((sent = sendto(testSock, &byteData, 1, 0, (struct sockaddr *)&servAddr,  (socklen_t)&servSize)) < 0){
    NSLog(@"Error sending to server: %d %d", errno, sent);
}

「sendto」が-1を返し、errnoが63に設定されるたびに、このエラーが発生したことはありません。

サーバー、または提供されたIPアドレスまたはポートに問題はないことを完全に確信して言うことができます。クライアント側である必要があります。

4

1 に答える 1

4

63は「ファイル名が長すぎます」です。この場合、カーネルに長すぎるように見えるのはsockaddrです。これは、実際の長さではなく、長さとしてポインターを渡しているためです。sendto()の最後のパラメーターはポインターではなく、値です。'&'を削除します。

于 2012-05-28T22:01:30.583 に答える