c++ - 当我更改值时,变量地址中的数据不会更新
问题描述
我尝试通过网络发送一些数据。两个长值除了一个字符。memcpy
我使用变量中的函数将数据转换为字节形式,results
并使用 UDP 连接通过网络发送它们:
#define SERVER "127.0.0.1"
#define PORT 9090
void die(char *s)
{
perror(s);
exit(1);
}
using namespace std ;
int main() {
char* results = new char[17];
nanoseconds ns = duration_cast<nanoseconds>(high_resolution_clock::now().time_since_epoch());
long a = ns.count() ;
long b = 1l ;
char end = '\n';
memcpy(results, &a, 8);
memcpy(results + 8, &b, 8);
memcpy(results + 16, &end, 1);
struct sockaddr_in si_other;
int sock ,slen=sizeof(si_other);
if ( (sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
die("socket");
}
memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(PORT);
if (inet_aton(SERVER , &si_other.sin_addr) == 0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
cout << "Sending data over the network ..." << endl;
while (true) {
ns = duration_cast<nanoseconds>(high_resolution_clock::now().time_since_epoch());
a = ns.count() ;
b += 1 ;
// cout << a << endl ;
memcpy(results, &a, 8);
memcpy(results + 8, &b, 8);
// cout << *((unsigned long*)results) << endl ;
// memcpy(results + 16, &end, 1);
if (sendto(sock, results, 17 , 0 , (struct sockaddr *) &si_other, slen)==-1)
{
die("sendto()");
}
}
}
while
我检查了目标中的数据,它与在循环之前设置为变量的值相同。变量中的数据也在results
更新,但通过网络发送的数据都是不变的!
我想这是因为sendto
函数行为。任何人都可以帮忙吗?
解决方案
推荐阅读
- scala - 在 Scala 中,解析 CSV 并仅将匹配的行添加到 List 中
- c - freopen() 是 ansi c 的一部分吗?
- r - 手动将图例添加到 R/ggplot2 绘图而不干扰绘图
- android - 恢复计数计时器 onClick onResume() 方法中的按钮
- angular - 如何在 Angular 7 中以引导模式播放视频
- javascript - 我尝试使用 ajax 删除数据但不工作
- python - 如何在 Python 中恢复根默认环境?
- javascript - 在日期数组中,如何从给定日期(javascript)中找到最接近的前一个日期?
- arrays - 数组置换算法
- scala - 覆盖需要 classTag 的 Scala 函数