我正在创建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地址或端口没有任何问题。它必须是客户端。
答案 0 :(得分:4)
63是'文件名太长'。在这种情况下,sockaddr对于内核来说显得太长了,这是因为您将指针作为长度而不是实际长度传递。 sendto()的最后一个参数不是指针,它是一个值。删除'&amp;'。