PowerPCからソケットで送信したデータを、X68のマシンのソケットで受信することで、エンディアンの問題を発生させることを確認する、ローカルで動かす送信プログラムと受信プログラムを作成する

送信プログラム(send_data.c):

#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>

int main() {
    int sockfd;
    struct sockaddr_in server_addr;
    uint32_t data = 0x12345678; // 4バイトのデータ(0x12345678)

    // ソケットの作成
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
        perror("socket");
        return 1;
    }

    // 送信先サーバの情報を設定
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(12345); // 送信先ポート番号
    server_addr.sin_addr.s_addr = INADDR_LOOPBACK; // ループバックアドレス (127.0.0.1)
    # INADDR_LOOPBACK で動かなければ、INADDR_ANY を使う

    // データを送信
    if (sendto(sockfd, &data, sizeof(uint32_t), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("sendto");
        close(sockfd);
        return 1;
    }

    printf("Data sent: 0x%X\n", data);

    close(sockfd);

    return 0;
}

受信プログラム(receive_data.c):

#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>

int main() {
    int sockfd;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    socklen_t client_addr_size = sizeof(client_addr);
    uint32_t received_data;

    // ソケットの作成
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
        perror("socket");
        return 1;
    }

    // サーバの情報を設定
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(12345); // 受信ポート番号
    server_addr.sin_addr.s_addr = INADDR_ANY;

    // ソケットとポートを結びつける
    if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("bind");
        close(sockfd);
        return 1;
    }

    printf("UDP Server is waiting for messages...\n");

    while (1) {
        // データを受信
        if (recvfrom(sockfd, &received_data, sizeof(uint32_t), 0, (struct sockaddr *)&client_addr, &client_addr_size) == -1) {
            perror("recvfrom");
            close(sockfd);
            return 1;
        }

        printf("Received Data: 0x%X\n", received_data);
    }

    close(sockfd);

    return 0;
}

2023,江端さんの技術メモ

Posted by ebata