用c语言写一个发送接收报文的程序
时间: 2023-09-30 13:05:28 浏览: 73
下面是一个简单的用C语言实现发送接收报文的示例程序,该程序使用了套接字(socket)编程接口:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT 8888
#define BUFFER_SIZE 1024
int main() {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
struct sockaddr_in serverAddr, clientAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
memset(&clientAddr, 0, sizeof(clientAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(PORT);
if (bind(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
perror("Failed to bind socket");
exit(EXIT_FAILURE);
}
char buffer[BUFFER_SIZE];
memset(buffer, 0, sizeof(buffer));
socklen_t clientAddrLen = sizeof(clientAddr);
int receiveLen = recvfrom(sock, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&clientAddr, &clientAddrLen);
if (receiveLen == -1) {
perror("Failed to receive data");
exit(EXIT_FAILURE);
}
printf("Received message: %s\n", buffer);
char* replyMsg = "Hello, I am server!";
int sendLen = sendto(sock, replyMsg, strlen(replyMsg), 0, (struct sockaddr*)&clientAddr, clientAddrLen);
if (sendLen == -1) {
perror("Failed to send data");
exit(EXIT_FAILURE);
}
printf("Reply message sent\n");
close(sock);
return 0;
}
```
该程序创建了一个UDP协议套接字,绑定到本地的8888端口,并且通过 `recvfrom` 函数接收客户端发送的报文,然后通过 `sendto` 函数发送回复报文给客户端。注意,该程序中的IP地址是通过 `INADDR_ANY` 宏指定的,表示可以接收来自任意IP地址的报文。如果要限制只接收来自特定IP地址的报文,可以使用 `inet_addr` 函数将IP地址转换为网络字节序的二进制形式,然后将其赋值给 `serverAddr.sin_addr.s_addr` 字段。