使用IPv6 Socket通信的client 和server 实例

c++ c++ 2273 人阅读 | 0 人回复

发表于 2023-5-19 14:10:26 | 显示全部楼层 |阅读模式


使用IPv6 Socket通信的client 和server 实例
  1. client侧

  2. /* sudochen@163.com
  3. *
  4. *
  5. */
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <sys/types.h>
  9. #include <sys/socket.h>
  10. #include <unistd.h>
  11. #include <sys/wait.h>
  12. #include <arpa/inet.h>

  13. #define LOCAL_IPV6_ADDR "2222:250:3001:1::1"
  14. #define IPV6_PORT        8888
  15. char msg[] = {"hello world\0"};

  16. int main(int argc, char **argv)
  17. {
  18.         int fd_client, fd_server;
  19.         int ret;
  20.         int size;

  21.         struct sockaddr_in6 server_addr,client_addr;
  22.        
  23.         fd_client = socket(AF_INET6,SOCK_DGRAM,0);
  24.         if (fd_client < 0) {
  25.                 printf("socket create for ipv6 failed\n");
  26.                 return -1;
  27.         }

  28.         memset(&server_addr,0,sizeof(server_addr));
  29.         server_addr.sin6_family = AF_INET6;
  30.         server_addr.sin6_port = htons(IPV6_PORT);
  31.         inet_pton(AF_INET6,LOCAL_IPV6_ADDR,server_addr.sin6_addr.__in6_u.__u6_addr8);
  32.         ret = sendto(fd_client,msg,strlen(msg),0,
  33.                                  (struct sockaddr*)(&server_addr),
  34.                                  sizeof(server_addr));
  35.         if (ret < 0) {
  36.                 printf("socket send for ipv6 failed\n");
  37.             close(fd_client);
  38.                 return -1;
  39.         }

  40.         close(fd_client);       
  41. }
  42. server侧

  43. #include <stdio.h>
  44. #include <string.h>
  45. #include <sys/types.h>
  46. #include <sys/socket.h>
  47. #include <unistd.h>
  48. #include <sys/wait.h>
  49. #include <arpa/inet.h>
  50. #include <stdio.h>
  51. #include <unistd.h>
  52. #include <time.h>
  53. #include <linux/if_ether.h>
  54. #include <net/if.h>
  55. #include <netinet/ip.h>
  56. #include <netinet/tcp.h>
  57. #include <netinet/udp.h>
  58. #include <sys/ioctl.h>
  59. #include <arpa/inet.h>
  60. #include <netinet/in.h>
  61. #include <fcntl.h>
  62. #include <sys/stat.h>
  63. #include <netdb.h>
  64. #include <stdlib.h>
  65. #include <assert.h>
  66. #include <netpacket/packet.h>
  67. #define IPV6_PORT        8888
  68. char msg[] = {"hello world\0"};

  69. int main(int argc, char **argv)
  70. {
  71.         int fd_client, fd_server;
  72.         int ret;
  73.         int size;

  74.         struct ifreq ifr;
  75.         struct sockaddr_in6 server_addr,client_addr;
  76.         memset(msg,0,sizeof(msg))        ;
  77.         int i = 0;

  78.         fd_client = socket(AF_INET6,SOCK_DGRAM,0);
  79.         if (fd_client < 0) {
  80.                 printf("socket create for ipv6 failed\n");
  81.                 return -1;
  82.         }



  83.         memset(&server_addr,0,sizeof(server_addr));
  84.         server_addr.sin6_family = AF_INET6;
  85.         server_addr.sin6_port = htons(IPV6_PORT);
  86.         inet_pton(AF_INET6,"2222:250:3001:1::1",server_addr.sin6_addr.__in6_u.__u6_addr8);
  87.         printf("IP :");
  88.         for (i=0;i<16;i++){
  89.                 printf("%02x ",server_addr.sin6_addr.__in6_u.__u6_addr8[i]);
  90.         }
  91.         printf("\n");

  92.         ret = bind(fd_client,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr_in6));
  93.         if (ret < 0) {
  94.                 perror("bind error\n");
  95.         }
  96.         size = sizeof(client_addr);
  97.         ret = recvfrom(fd_client,msg,sizeof(msg),0,(struct sockaddr*)(&client_addr),&size);
  98.         if (ret < 0) {
  99.                 printf("resvfrom error\n");
  100.         }
  101.         printf("%s\n",msg);
  102.         close(fd_client);
  103.         return 0;

  104.         ret =

  105.         close(fd_client);
  106.        
  107. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则