如何在QNX上使用UDP套接字?

作者:佚名 上传时间:2023-04-28 运行软件:文本编辑器 软件版本:QNX 7.0 版权申诉

本示例代码展示了如何使用QNX操作系统上的UDP套接字进行网络通信。首先需要创建一个UDP套接字,然后绑定到本地IP地址和端口,并设置接收和发送缓冲区。接收方可以通过recvfrom函数等待接收来自指定IP地址和端口的数据包,发送方可以通过sendto函数将数据包发送到指定IP地址和端口。

#include <sys/select.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define MAX_BUF_SIZE 1024
#define LOCAL_IP "127.0.0.1"
#define LOCAL_PORT 12345
#define REMOTE_IP "127.0.0.1"
#define REMOTE_PORT 54321

int main(void)
{
    int udp_sock;
    struct sockaddr_in local_addr, remote_addr;
    char send_buf[MAX_BUF_SIZE], recv_buf[MAX_BUF_SIZE];
    fd_set read_set;
    int ret;

    // 创建UDP套接字
    if ((udp_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
        perror("socket");
        exit(EXIT_FAILURE);
    }

    // 绑定到本地IP地址和端口
    memset(&local_addr, 0, sizeof(local_addr));
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(LOCAL_PORT);
    local_addr.sin_addr.s_addr = inet_addr(LOCAL_IP);
    if (bind(udp_sock, (struct sockaddr *)&local_addr, sizeof(local_addr)) < 0)
    {
        perror("bind");
        exit(EXIT_FAILURE);
    }

    // 设置接收和发送缓冲区
    int opt_value = MAX_BUF_SIZE;
    if (setsockopt(udp_sock, SOL_SOCKET, SO_RCVBUF, &opt_value, sizeof(opt_value)) < 0)
    {
        perror("setsockopt for SO_RCVBUF");
        exit(EXIT_FAILURE);
    }
    if (setsockopt(udp_sock, SOL_SOCKET, SO_SNDBUF, &opt_value, sizeof(opt_value)) < 0)
    {
        perror("setsockopt for SO_SNDBUF");
        exit(EXIT_FAILURE);
    }

    // 发送数据包到指定IP地址和端口
    memset(&remote_addr, 0, sizeof(remote_addr));
    remote_addr.sin_family = AF_INET;
    remote_addr.sin_port = htons(REMOTE_PORT);
    remote_addr.sin_addr.s_addr = inet_addr(REMOTE_IP);
    sprintf(send_buf, "Hello, QNX from UDP!");
    if (sendto(udp_sock, send_buf, strlen(send_buf), 0, (struct sockaddr *)&remote_addr, sizeof(remote_addr)) < 0)
    {
        perror("sendto");
        exit(EXIT_FAILURE);
    }

    // 等待接收来自指定IP地址和端口的数据包
    FD_ZERO(&read_set);
    FD_SET(udp_sock, &read_set);
    ret = select(udp_sock + 1, &read_set, NULL, NULL, NULL);
    if (ret < 0)
    {
        perror("select");
        exit(EXIT_FAILURE);
    }
    else if (ret == 0)
    {
        printf("No data received within timeout!\n");
        exit(EXIT_FAILURE);
    }
    else
    {
        socklen_t addr_len = sizeof(remote_addr);
        int recv_len = recvfrom(udp_sock, recv_buf, MAX_BUF_SIZE, 0, (struct sockaddr *)&remote_addr, &addr_len);
        if (recv_len < 0)
        {
            perror("recvfrom");
            exit(EXIT_FAILURE);
        }
        else
        {
            recv_buf[recv_len] = '\0';
            printf("Received data: %s\n", recv_buf);
        }
    }

    close(udp_sock);

    return EXIT_SUCCESS;
}

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
何在QNX使用UDP套接
本示例代码展示了如何使用QNX操作系统上的UDP套接字进行网络通信。首先需要创建一个UDP套接字,然后绑定到本地IP地址和端口,并设置接收和发送缓冲区。接收方可以通过recvfrom函数等待接收来自指
QNX 7.0
文本编辑器
2023-04-28 00:11
UDP套接
UDP套接字是网络编程中使用的一种无连接的套接字类型,主要用于无需建立可靠连接、低延迟的数据传输。
zip
18.32KB
2024-05-01 04:59
UDP套接详解
UDP套接字详解
DOCX
0B
2019-02-26 23:01
UDP套接实例.
UDP套接字实例
DOCX
0B
2019-07-29 16:43
使用socket套接发送udp数据包
这个程序是使用socket编写udp数据包,数据包内容可任意定义的。有兴趣就下来研究研究啦。有问题留言给我拉!我已经测试过,没有错误,正常运行的。使用时,把接受数据包的ip改一改,用wireshake
CPP
0B
2019-05-04 08:39
UDP TCP并发套接例程迭代套接例程
各种套接字编程例程,既有UDP,又包含TCP,有并发,有轮询,也有IO复用,超级实用
7Z
0B
2018-12-28 17:29
linux下的UDP套接编程
一.相关过程以及知识请详见我的另一篇博客《winsock套接字编程》,这里不再累述。 二.相关代码:
初学Sockets编程(三) UDP套接
UDP的过程通信看上去比TCP简单一些,但也有许多细节需要注意。比如,UDP套接字使用前不必连接,TCP类似于电话通信,UDP类似于邮件通信,UDP套接字就像一个邮箱,可以
java套接socket通信UDP
该文挡中详细总结了Java中怎样通过socket实现客户端和服务器端发送UDP数据包来通信
TXT
0B
2019-07-29 16:43
UDP聊天软件套接
用C语言 套接字编写基于UDP的局域网聊天软件,附代码,服务端客户端模式。
ZIP
0B
2018-12-09 02:22