C:通过 UDP 发送 float 导致随机符号

标签 c udp

我的代码有问题,应该通过 udp 发送 float 。如果我检查我的端口传入,我只会收到随机符号而不是我想要的数字。

printf("Lets send some cool data \n");
int clientSocket;

struct sockaddr_in serverAddress;
socklen_t addressSize;

unsigned char   l_remoteHostAddr_rg4ui8[4]  = {192,168,22,160};
unsigned short  l_remoteHostPort_ui16       = 5000;
int             l_udpSocket_i32;
unsigned int    l_sendState_bl;

// open udp connection
l_udpSocket_i32 = g_halMatlab_initConnection_i32( l_remoteHostAddr_rg4ui8, l_remoteHostPort_ui16 );

halImu_orientationValues l_imuMeasurements_st;
g_halImu_initImuSensors_bl();

/*Create UDP socket*/
clientSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

serverAddress.sin_family = PF_INET;
serverAddress.sin_port = htons(REMOTE_PORT);
serverAddress.sin_addr.s_addr = inet_addr(REMOTE_ADDR);

memset(serverAddress.sin_zero, '\0', sizeof(serverAddress.sin_zero));

/*Initialize size variable to be used later on*/
addressSize = sizeof(serverAddress);

printf("Start Sending Messages\n");

int i = kbhit();
while(i != 'q')
    {
        sleep(1);
        g_halImu_triggerImuReading_bl();
        g_halImu_triggerBaroReading_bl();
        g_halImu_triggerGyroReading_bl();
        g_halImu_triggerAccReading_bl();

        l_imuMeasurements_st=g_halImu_getImuValues_str();

        l_sendState_bl = g_halMatlab_sendImuState_bl(l_udpSocket_i32, l_imuMeasurements_st);

        printf("Acc X %f \n", l_imuMeasurements_st.acc.x_f64);

        float k = l_imuMeasurements_st.acc.x_f64;

        char imu_x[16];

        sprintf(imu_x,"%f \n",k);
        printf(imu_x,'\n'); //this prints the right number 

        sendto(clientSocket, imu_x, (int)sizeof(imu_x), 0,
               (struct sockaddr *)&serverAddress,addressSize);
        printf("And send again....\n");
    }

如果我知道使用 nc -ul 5000,我会收到包含随机内容的 16 位字符串。

如果有人知道我的问题出在哪里,我会很高兴收到你的来信

祝你有美好的一天!

最佳答案

第一个问题是您发送了两次相同的数据。首先通过一个名为 clientSocket 的套接字,另一个通过另一个名为 l_udpSocket_i32 的套接字。我正在清理代码,以便只编译 clientSocket。

您的第二个问题是您试图打印 imu_x 的所有 16 个数据。您应该只打印书面字符。我添加了一个名为 written 的新变量。运行它,您将看不到任何垃圾。

printf("Lets send some cool data \n");
int clientSocket;

struct sockaddr_in serverAddress;
socklen_t addressSize;
int written;
char imu_x[16];

halImu_orientationValues l_imuMeasurements_st;
g_halImu_initImuSensors_bl();

/*Create UDP socket*/
clientSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

serverAddress.sin_family = PF_INET;
serverAddress.sin_port = htons(REMOTE_PORT);
serverAddress.sin_addr.s_addr = inet_addr(REMOTE_ADDR);

memset(serverAddress.sin_zero, '\0', sizeof(serverAddress.sin_zero));

/*Initialize size variable to be used later on*/
addressSize = sizeof(serverAddress);

printf("Start Sending Messages\n");

int i = kbhit();
while(i != 'q')
    {
        sleep(1);
        g_halImu_triggerImuReading_bl();
        g_halImu_triggerBaroReading_bl();
        g_halImu_triggerGyroReading_bl();
        g_halImu_triggerAccReading_bl();

        l_imuMeasurements_st=g_halImu_getImuValues_str();

        printf("Acc X %f \n", l_imuMeasurements_st.acc.x_f64);

        float k = l_imuMeasurements_st.acc.x_f64;


        written = sprintf(imu_x,"%f \n",k);
        printf(imu_x,'\n'); //this prints the right number 

        sendto(clientSocket, imu_x, written, 0,
               (struct sockaddr *)&serverAddress,addressSize);
        printf("And send again....\n");
    }

关于C:通过 UDP 发送 float 导致随机符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37715229/

相关文章:

c - 将各种参数从 C 传递到汇编器

sockets - 如何将 UDP 套接字绑定(bind)到一系列端口

c - 如何在 UNIX 上的 udp 套接字上获取 icmp

c - cat 命令中的 "-u"选项有什么用?

c - 为什么这在 C(数组)中无效?

c - 如何用C语言简单地发送UDP数据?

sockets - 捕获 UDP 流数据

java - 在 Android 中使用 android.net 或 java.net 哪个 Socket API 进行 UDP 通信?

java - Java 中的节点,来自 C 背景

c - 一个未初始化的变量可能有一个未定义的值,但那个未定义的值是否具有相同的数据类型?