linux虚拟机c语言UDP通信
时间: 2023-10-26 12:19:59 浏览: 144
基于c语言实现的UDP通信系统
要在Linux虚拟机上实现C语言UDP通信,你需要遵循以下步骤:
1. 安装必要的软件包:在Linux虚拟机上安装必要的软件包,包括gcc、g++、make和libc-dev。
2. 编写UDP服务器代码:使用C语言编写UDP服务器代码并保存为server.c。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int sockfd;
struct sockaddr_in server_addr, client_addr;
char buffer[BUFFER_SIZE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
memset(&client_addr, 0, sizeof(client_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
if (bind(sockfd, (const struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
int len, n;
len = sizeof(client_addr);
n = recvfrom(sockfd, (char*)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr*)&client_addr, &len);
buffer[n] = '\0';
printf("Client : %s\n", buffer);
sendto(sockfd, (const char*)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr*)&client_addr, len);
printf("Message sent to the client.\n");
return 0;
}
```
3. 编译UDP服务器代码:使用以下命令将server.c编译为可执行文件server。
```
gcc server.c -o server
```
4. 编写UDP客户端代码:使用C语言编写UDP客户端代码并保存为client.c。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int sockfd;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
int n, len;
printf("Enter message to send : ");
fgets(buffer, BUFFER_SIZE, stdin);
sendto(sockfd, (const char*)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr*)&server_addr, sizeof(server_addr));
printf("Message sent to the server.\n");
n = recvfrom(sockfd, (char*)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr*)&server_addr, &len);
buffer[n] = '\0';
printf("Server : %s\n", buffer);
close(sockfd);
return 0;
}
```
5. 编译UDP客户端代码:使用以下命令将client.c编译为可执行文件client。
```
gcc client.c -o client
```
6. 运行代码:在虚拟机上运行UDP服务器代码和UDP客户端代码。首先,运行UDP服务器。
```
./server
```
然后在另一个终端中运行UDP客户端。
```
./client
```
输入要发送的消息,然后等待服务器的响应。
这样,你就可以在Linux虚拟机上使用C语言实现UDP通信了。
阅读全文