udp实现给不同端口发送信息 套接字
时间: 2023-12-29 20:03:03 浏览: 32
在UDP协议中,可以通过创建不同的UDP套接字并绑定到不同的端口,来实现向不同端口发送信息的功能。
以下是一个简单的代码示例,演示了如何创建两个UDP套接字并分别绑定到不同的端口,然后向这两个端口发送不同的信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MAX_BUF_SIZE 1024
int main(int argc, char *argv[])
{
if (argc != 3) {
printf("Usage: %s <port1> <port2>\n", argv[0]);
return -1;
}
int sockfd1 = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd1 < 0) {
perror("socket1");
return -1;
}
int sockfd2 = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd2 < 0) {
perror("socket2");
return -1;
}
int port1 = atoi(argv[1]);
struct sockaddr_in addr1;
bzero(&addr1, sizeof(addr1));
addr1.sin_family = AF_INET;
addr1.sin_addr.s_addr = htonl(INADDR_ANY);
addr1.sin_port = htons(port1);
if (bind(sockfd1, (struct sockaddr *)&addr1, sizeof(addr1)) < 0) {
perror("bind1");
return -1;
}
int port2 = atoi(argv[2]);
struct sockaddr_in addr2;
bzero(&addr2, sizeof(addr2));
addr2.sin_family = AF_INET;
addr2.sin_addr.s_addr = htonl(INADDR_ANY);
addr2.sin_port = htons(port2);
if (bind(sockfd2, (struct sockaddr *)&addr2, sizeof(addr2)) < 0) {
perror("bind2");
return -1;
}
char buf1[MAX_BUF_SIZE] = "Hello, port1!";
int len1 = strlen(buf1);
struct sockaddr_in dst_addr1;
bzero(&dst_addr1, sizeof(dst_addr1));
dst_addr1.sin_family = AF_INET;
dst_addr1.sin_addr.s_addr = htonl(INADDR_LOOPBACK); // 发送到本地回环地址
dst_addr1.sin_port = htons(port1);
char buf2[MAX_BUF_SIZE] = "Hello, port2!";
int len2 = strlen(buf2);
struct sockaddr_in dst_addr2;
bzero(&dst_addr2, sizeof(dst_addr2));
dst_addr2.sin_family = AF_INET;
dst_addr2.sin_addr.s_addr = htonl(INADDR_LOOPBACK); // 发送到本地回环地址
dst_addr2.sin_port = htons(port2);
int ret1 = sendto(sockfd1, buf1, len1, 0, (struct sockaddr *)&dst_addr1, sizeof(dst_addr1));
if (ret1 < 0) {
perror("sendto1");
return -1;
}
int ret2 = sendto(sockfd2, buf2, len2, 0, (struct sockaddr *)&dst_addr2, sizeof(dst_addr2));
if (ret2 < 0) {
perror("sendto2");
return -1;
}
close(sockfd1);
close(sockfd2);
return 0;
}
```
在运行程序时,需要提供两个不同的端口号作为参数。程序会创建两个UDP套接字,并分别绑定到这两个端口上。然后程序会向这两个端口发送不同的消息,最后关闭套接字并退出程序。