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