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;
}