用c语言写一个报文交互案例
时间: 2023-05-23 11:02:42 浏览: 44
好的,以下是一个简单的报文交互案例:
#include <stdio.h>
#include <string.h>
int main() {
// 定义发送方和接收方的地址和端口
char sender_ip[] = "127.0.0.1";
int sender_port = 8888;
char receiver_ip[] = "127.0.0.1";
int receiver_port = 8889;
// 创建发送方和接收方的socket
int sender_socket = socket(AF_INET, SOCK_DGRAM, 0);
int receiver_socket = socket(AF_INET, SOCK_DGRAM, 0);
// 绑定发送方和接收方的地址和端口
struct sockaddr_in sender_addr, receiver_addr;
sender_addr.sin_family = AF_INET;
sender_addr.sin_addr.s_addr = inet_addr(sender_ip);
sender_addr.sin_port = htons(sender_port);
receiver_addr.sin_family = AF_INET;
receiver_addr.sin_addr.s_addr = inet_addr(receiver_ip);
receiver_addr.sin_port = htons(receiver_port);
bind(sender_socket, (struct sockaddr *)&sender_addr, sizeof(sender_addr));
bind(receiver_socket, (struct sockaddr *)&receiver_addr, sizeof(receiver_addr));
// 发送方向接收方发送消息
char send_buf[1024] = "Hello, receiver!";
sendto(sender_socket, send_buf, strlen(send_buf) + 1, 0, (struct sockaddr *)&receiver_addr, sizeof(receiver_addr));
// 接收方接收消息并回复消息
char recv_buf[1024];
struct sockaddr_in sender_sockaddr;
int sender_sockaddr_size = sizeof(sender_sockaddr);
recvfrom(receiver_socket, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&sender_sockaddr, &sender_sockaddr_size);
printf("Received message from %s:%d: %s\n", inet_ntoa(sender_sockaddr.sin_addr), ntohs(sender_sockaddr.sin_port), recv_buf);
char reply_buf[1024] = "Hello, sender!";
sendto(receiver_socket, reply_buf, strlen(reply_buf) + 1, 0, (struct sockaddr *)&sender_sockaddr, sizeof(sender_sockaddr));
// 关闭发送方和接收方的socket
close(sender_socket);
close(receiver_socket);
return 0;
}