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 回答