gpt4 book ai didi

c - UDP 套接字 : invalid argument error in sendto

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:08 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的UDP 套接字客户端-服务器程序。客户端机器应该向服务器发送一个字符串,服务器将用 ACK 消息进行应答。

客户端的实现如下:

int main() {
message_send('L');
return EXIT_SUCCESS;
}


int message_send(char code) {
int sockfd;
ssize_t n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
// Create an UDP socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
return -1;
}

// Setup the socket
memset((void *) &servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = (in_port_t) htonl(SERV_PORT);
if (inet_pton(AF_INET, SERVIP, &servaddr.sin_addr) <= 0) {
fprintf(stderr, "Error in inet_pton for %s\n", SERVIP);
exit(1);
}

// Send a test string
char *test = malloc(MAXLINE);
snprintf(test, MAXLINE, "SENDING:%c", code);
if (sendto(sockfd, &test, sizeof(test), 0, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
perror("sendto");
return -1;
}

// Get an answer from the server
n = recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
if (n < 0) {
perror("recvfrom");
exit(1);
} else if (n > 0) {
recvline[n] = 0; // Add ending character
if (fputs(recvline, stdout) == EOF) { // Print the received message in stdout
perror("fputs");
return -1;
}
}
return 0;
}

如果我运行它(无论服务器机器是否正在运行),我都会收到以下错误:

sendto: Invalid argument

为什么会出现此错误?

最佳答案

问题最可能的原因是线路

servaddr.sin_port = (in_port_t) htonl(SERV_PORT);

我猜这会给你一个错误的端口号(即它会给你一个小端机器上的端口 0)。端口号是 16 位的,因此您应该使用 htons

此外,将 &testsizeof(test) 传递给 sendto 将通过网络发送指针值。要发送字符串,您需要使用teststrlen(test)+1

关于c - UDP 套接字 : invalid argument error in sendto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48134867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com