Recvfrom()不断返回错误的值

Recvfrom()不断返回错误的值,c,sockets,networking,udp,C,Sockets,Networking,Udp,我在main中调用udpclient,通过“这是一个测试”作为参数消息 #define MAX_BUFFER 128 void udpclient(char *message, char *target_ip, int target_port){ ///* address of server we trying to reach */ struct sockaddr_in targetaddress; /* buffer to receive echo */ char buffer[MAX

我在main中调用udpclient,通过“这是一个测试”作为参数消息

#define MAX_BUFFER 128


void udpclient(char *message, char *target_ip, int target_port){

///* address of server we trying to reach */
struct sockaddr_in targetaddress;
/* buffer to receive echo */
char buffer[MAX_BUFFER];

/* create socket */
int socketfd;
socketfd = socket(AF_INET, SOCK_DGRAM, 0);
if(socketfd == -1)
    socketerror();

/* target server informations */
memset(&targetaddress, 0, sizeof(targetaddress));
targetaddress.sin_family = AF_INET;
targetaddress.sin_port   = htons(target_port);
targetaddress.sin_addr.s_addr = inet_addr(target_ip);
在我向服务器发送消息后,服务器必须回复“echo:这是一个测试”,但由于某种原因,recvfrom()返回n=8,所以当我写入(1,buffer,n)时,它会截断缓冲区

/* send message to targetaddress */
ssize_t n;
n = sendto(socketfd, message, sizeof(message), 0, (const struct sockaddr *) &targetaddress, sizeof(targetaddress));
if(n == -1)
    udpsenderror();

printf("%i\n", n);

socklen_t addrlen;
addrlen = sizeof(targetaddress);
/* receive echo from targetaddress */
n = recvfrom(socketfd, buffer, MAX_BUFFER, 0, (struct sockaddr *) &targetaddress, &addrlen);
if(n == -1)
    udpechoerror();

printf("%i\n", n);
write(1, "echo: ", 6);
write(1, buffer, n);

return;
}

Recvfrom()应该返回消息的长度如果我没有弄错的话,我不知道我哪里做错了!救命

n = sendto(socketfd, message, sizeof(message), 0, (const struct sockaddr *) &targetaddress, sizeof(targetaddress));

由于
message
char*
sizeof(message)
给出了
char*
在您的平台上的字节数。显然,这是8个字节,因此您发送了一条8字节的消息。

从接收呼叫通常返回所有可用数据,直到请求的数量,而不是等待接收请求的全部数量。
char*message
,您认为
sizeof(message)是什么
返回?Andrew Henle我认为错误就在那里!我要确认一下,非常感谢,就这样!!保持安全,呆在家里你完全正确!谢谢你的解释,注意安全