Linux IPv6 UDP套接字编程示例
生活随笔
收集整理的這篇文章主要介紹了
Linux IPv6 UDP套接字编程示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ?udp ipv6套接字編程和ipv4接口類似,參數略有不同,流程都包括創建套接字、綁定地址、發送等。
下面是一個udp ipv6 demo, 包括創建ipv6套接字、綁定地址和發送數據等。
首先先在linux上配置一個本地站點地址,然后使用這個地址發送。
//linux上添加IPv6地址命令 sudo ip -6 addr add fd11::100/64 dev eth0 /** Description : IPv6 UDP套接字編程示例* Author : mason* Date : 201808*/ #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h> #include <string.h> #include <stdio.h>/* IPv6壓縮格式地址 */ static char src[] = "fd11::100"; static char dst[] = "fd11::200";void main() {int udp6_socket, ret, ttl, on, addr_len;struct sockaddr_in6 saddr;struct sockaddr_in6 daddr;char buffer[] = "Hello World6";/* 設置IPv6地址,這個函數支持三種IPv6地址格式,包括首選格式、壓縮格式和映射格式*/if ((inet_pton(AF_INET6, (char *)&src[0], &saddr.sin6_addr)) != 1){printf("invalid ipv6 addr \r\n");return ;}if ((inet_pton(AF_INET6, (char *)&dst[0], &daddr.sin6_addr)) != 1){printf("invalid ipv6 addr \r\n");return ;} addr_len = sizeof(struct sockaddr_in6);saddr.sin6_family = AF_INET6;saddr.sin6_port = htons(30000);daddr.sin6_family = AF_INET6;daddr.sin6_port = htons(40000);/* 創建IPv6套接字,IPv6使用AF_INET6 */udp6_socket = socket(AF_INET6, SOCK_DGRAM, 0);if (udp6_socket == -1){printf("create udp6_socket fail\r\n");return;}/* 綁定地址 */if (bind(udp6_socket, (struct sockaddr *)&saddr, addr_len)){printf("udp6 bind addr fail, err : %d\r\n", errno);close(udp6_socket);return;}/* 發送 */ret = sendto(udp6_socket, &buffer[0], sizeof(buffer), 0, (struct sockaddr *)&daddr, addr_len);if (ret > 0){printf("udp6 send %d bytes success \r\n", ret);}/* 關閉套接字 */close(udp6_socket);return; }Makefile:
udp6:$(CC) -o udp6 udp6_demo.c clean:@rm -rf *.o udp6?
參考資料:
1. linux error code 含義?https://blog.csdn.net/wangcg123/article/details/51218408?
2. man sendto?https://linux.die.net/man/2/sendto
3. man socket?https://linux.die.net/man/7/socket
4 linux 下ping6?https://blog.csdn.net/hansel/article/details/5304103
總結
以上是生活随笔為你收集整理的Linux IPv6 UDP套接字编程示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 内核定时器使用 一 低精度定
- 下一篇: pdf 激活(急速pdf激活码)