网络编程初学者有点小问题想请教大佬
一段udp客户端代码,在ubuntu下编译运行,结果正常,但是在centos下编译运行,收到的前3或者4个字节会变成0
在64位ubuntu14.04(gcc4.8.4)和64位linux mint 20.1(gcc9.3.0)上测试没有问题,在64位centos7.4(gcc4.8.5),64位centos8.3(gcc8.3.1)和arm32位centos7.8(gcc4.8.5)上,都会有前3或4字节变成0的情况
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
int main()
{
int sockfd, n;
struct sockaddr_in sockAddr;
int optval = 1;
char sendData[] = "send data";
char recvData[16] = {0};
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("socket error");
return 0;
}
bzero(&sockAddr, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(6666);
sockAddr.sin_addr.s_addr = inet_addr("255.255.255.255");
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval));
if (sendto(sockfd, sendData, sizeof(sendData), 0, (struct sockaddr *)&sockAddr, sizeof(sockAddr)) < 0)
{
printf("sendto error\n");
close(sockfd);
return 0;
}
char len = sizeof(sockAddr);
if (recvfrom(sockfd, recvData, sizeof(recvData), 0, (struct sockaddr *)&sockAddr, (socklen_t *)&len) <= 0)
{
printf("recvfrom error\n");
close(sockfd);
return 0;
}
printf("recv data: ");
int i;
for (i = 0; i < sizeof(recvData); i++)
{
printf("%02X ", recvData[i]);
}
printf("\n");
}
结果如下:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=9360be90ae12c8fcb4f3f6c5cc0292b4/40d8540fd9f9d72a81b2dcadc32a2834369bbbc5.jpg?tbpicau=2024-07-07-05_14b478162d1623ab85d6f9ad97dcb4a7)
一段udp客户端代码,在ubuntu下编译运行,结果正常,但是在centos下编译运行,收到的前3或者4个字节会变成0
在64位ubuntu14.04(gcc4.8.4)和64位linux mint 20.1(gcc9.3.0)上测试没有问题,在64位centos7.4(gcc4.8.5),64位centos8.3(gcc8.3.1)和arm32位centos7.8(gcc4.8.5)上,都会有前3或4字节变成0的情况
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
int main()
{
int sockfd, n;
struct sockaddr_in sockAddr;
int optval = 1;
char sendData[] = "send data";
char recvData[16] = {0};
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("socket error");
return 0;
}
bzero(&sockAddr, sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(6666);
sockAddr.sin_addr.s_addr = inet_addr("255.255.255.255");
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval));
if (sendto(sockfd, sendData, sizeof(sendData), 0, (struct sockaddr *)&sockAddr, sizeof(sockAddr)) < 0)
{
printf("sendto error\n");
close(sockfd);
return 0;
}
char len = sizeof(sockAddr);
if (recvfrom(sockfd, recvData, sizeof(recvData), 0, (struct sockaddr *)&sockAddr, (socklen_t *)&len) <= 0)
{
printf("recvfrom error\n");
close(sockfd);
return 0;
}
printf("recv data: ");
int i;
for (i = 0; i < sizeof(recvData); i++)
{
printf("%02X ", recvData[i]);
}
printf("\n");
}
结果如下:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=9360be90ae12c8fcb4f3f6c5cc0292b4/40d8540fd9f9d72a81b2dcadc32a2834369bbbc5.jpg?tbpicau=2024-07-07-05_14b478162d1623ab85d6f9ad97dcb4a7)