首页 > 解决方案 > 当我更改值时,变量地址中的数据不会更新

问题描述

我尝试通过网络发送一些数据。两个长值除了一个字符。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函数行为。任何人都可以帮忙吗?

标签: c++socketsnetwork-programming

解决方案


推荐阅读