更改值时,变量地址中的数据不会更新

时间:2018-08-20 13:16:45

标签: c++ sockets network-programming

我尝试通过网络发送一些数据。除字符外还有两个long值。我使用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函数的行为。有人可以帮忙吗?

0 个答案:

没有答案