c语言socket编程udp解析
时间: 2023-08-23 14:05:51 浏览: 109
上市公司企业澄清公告数据(2001-2023年) .xlsx
UDP是一种无连接的传输协议,因此在使用UDP进行网络编程时,需要使用socket API提供的相关函数来进行编程。下面是一个简单的UDP客户端和服务器的示例:
UDP客户端:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
#define SERVER_IP "127.0.0.1"
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in server_addr;
char sendbuf[1024] = "Hello, server!";
char recvbuf[1024];
int len = sizeof(struct sockaddr_in);
// 创建socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("create socket failed");
exit(-1);
}
// 设置server_addr
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
// 发送数据
sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&server_addr, len);
// 接收数据
recvfrom(sockfd, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&server_addr, &len);
printf("recv from server: %s\n", recvbuf);
// 关闭socket
close(sockfd);
return 0;
}
```
UDP服务器:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8888
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in server_addr, client_addr;
char recvbuf[1024];
char sendbuf[1024] = "Hello, client!";
int len = sizeof(struct sockaddr_in);
// 创建socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("create socket failed");
exit(-1);
}
// 设置server_addr
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
// 绑定socket
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind socket failed");
exit(-1);
}
while (1) {
// 接收数据
recvfrom(sockfd, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&client_addr, &len);
printf("recv from client: %s\n", recvbuf);
// 发送数据
sendto(sockfd, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&client_addr, len);
}
// 关闭socket
close(sockfd);
return 0;
}
```
在上面的示例中,客户端向服务器发送一条消息,服务器收到消息后回复一条消息。在实际使用中,需要根据具体的需求进行相应的修改,例如添加异常处理、多线程处理等。
阅读全文