找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3916|回复: 3

【TCP/IP】IPV6 TCP的WinSocket实现。

[复制链接]

1

主题

5

回帖

60

积分

用户组: 小·技术宅

UID
23
精华
1
威望
2 点
宅币
45 个
贡献
0 次
宅之契约
0 份
在线时间
3 小时
注册时间
2014-2-1
发表于 2014-3-19 20:29:20 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
制作文件传输器,云大可达10+MB/S速度(正在编写)服务器源码:
注意://需要将结构SOCKADDR_IN6的sin6_addr.s6_addr调整为u_char[20];否则accept时产生10014错误
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <Ws2tcpip.h>
  4. #include "tpipv6.h"
  5. #pragma comment(lib,"ws2_32")  //加载ws2_32lib库
  6. char* IPV6AddressToString(u_char* buf)//将IPV6地址转换为标准形势,随意而作,存在内存泄露问题;
  7. {
  8.     char* str = (char*)malloc(40);
  9.     memset(str,0,40);
  10.     for(int i=0;i<7;i++)
  11.     {
  12.         sprintf(str,"%s%x%x:",str,buf[i*2],buf[i*2+1]);
  13.     }
  14.     sprintf(str,"%s%x%x",str,buf[14],buf[15]);
  15.     return str;
  16. }
  17. int main()
  18. {
  19.     WSADATA wsaData;
  20.     int reVel;
  21.     WSAStartup(MAKEWORD(1,1),&wsaData);
  22.     SOCKET s = socket(AF_INET6,SOCK_STREAM,IPPROTO_TCP);
  23.     if (s == INVALID_SOCKET)
  24.     {
  25.         printf("创建Socket失败.\n");
  26.     }else{
  27.         printf("创建Socket成功.\n");
  28.         addrinfo hints;
  29.         addrinfo* res = NULL;
  30.         memset(&hints,0,sizeof(hints));
  31.         hints.ai_family=AF_INET6;
  32.         hints.ai_socktype=SOCK_STREAM;
  33.         hints.ai_protocol=IPPROTO_TCP;
  34.         hints.ai_flags=AI_PASSIVE;
  35.         reVel = getaddrinfo("::1","3000",&hints,&res);
  36.         if(reVel !=0)
  37.         {
  38.             printf("getaddrinfo失败.\n");
  39.         }else{
  40.             printf("getaddrinfo成功.\n");
  41.             reVel = bind(s,res->ai_addr,res->ai_addrlen);
  42.             if(reVel !=0)
  43.             {
  44.                 printf("bind失败.\n");
  45.             }else{
  46.                 printf("bind成功.\n");
  47.                 reVel = listen(s,1);
  48.                 if(reVel !=0)
  49.                 {
  50.                     printf("listen失败.\n");
  51.                 }else{
  52.                     printf("listen成功.开始等待客户接入\n");
  53.                     SOCKADDR_IN6 childadd;//需要将结构SOCKADDR_IN6的sin6_addr.s6_addr调整为u_char[20];否则accept时产生10014错误
  54.                     int len = sizeof(SOCKADDR_IN6);
  55.                     SOCKET childs = accept(s,(sockaddr *)&childadd,&len);
  56.                     printf("用户进入成功:%s\n",IPV6AddressToString(childadd.sin6_addr.s6_addr));
  57.                     char* buf = new char[1024];
  58.                     recv(childs,buf,1024,0);
  59.                     printf("收到数据:%s\n",buf);
  60.                     send(childs,"OK",sizeof("OK"),0);
  61.                     closesocket(s);
  62.                     closesocket(childs);
  63.                     WSACleanup();
  64.                 }

  65.             }
  66.         }
  67.     }
  68.     return 0;
  69. }
复制代码
回复

使用道具 举报

1

主题

5

回帖

60

积分

用户组: 小·技术宅

UID
23
精华
1
威望
2 点
宅币
45 个
贡献
0 次
宅之契约
0 份
在线时间
3 小时
注册时间
2014-2-1
 楼主| 发表于 2014-3-19 20:29:43 | 显示全部楼层
客户端源码:
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <Ws2tcpip.h>
  4. #include "tpipv6.h"
  5. #pragma comment(lib,"ws2_32")  //加载ws2_32lib库
  6. int main()
  7. {
  8.     WSADATA wsaData;
  9.     int reVel;
  10.     WSAStartup(MAKEWORD(1,1),&wsaData);
  11.     SOCKET s = socket(AF_INET6,SOCK_STREAM,IPPROTO_TCP);
  12.     if (s == INVALID_SOCKET)
  13.     {
  14.         printf("创建Socket失败.\n");
  15.     }else{
  16.         printf("创建Socket成功.\n");
  17.         addrinfo hints;
  18.         addrinfo* res = NULL;
  19.         memset(&hints,0,sizeof(hints));
  20.         hints.ai_family=AF_INET6;
  21.         hints.ai_socktype=SOCK_STREAM;
  22.         hints.ai_protocol=IPPROTO_TCP;
  23.         hints.ai_flags=AI_PASSIVE;
  24.         reVel = getaddrinfo("::1","3000",&hints,&res);
  25.         connect(s,res->ai_addr,res->ai_addrlen);
  26.         send(s,"Hi,IPV6",sizeof("Hi,IPV6"),0);
  27.         char* buf = new char[1024];
  28.         recv(s,buf,1024,0);
  29.         printf("收到数据:%s\n",buf);
  30.         closesocket(s);
  31.         WSACleanup();
  32.     }
  33. }
复制代码
VC6.0源码下载:http://download.csdn.net/detail/u011910399/6854899
回复 赞! 靠!

使用道具 举报

1112

主题

1653

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24263 个
贡献
46222 次
宅之契约
0 份
在线时间
2298 小时
注册时间
2014-1-26
发表于 2014-3-19 20:41:55 | 显示全部楼层
支持!顺带说一句……我可能会给你的代码进行重排版,不介意吧?
回复 赞! 靠!

使用道具 举报

1

主题

5

回帖

60

积分

用户组: 小·技术宅

UID
23
精华
1
威望
2 点
宅币
45 个
贡献
0 次
宅之契约
0 份
在线时间
3 小时
注册时间
2014-2-1
 楼主| 发表于 2014-4-17 21:26:31 | 显示全部楼层
0xAA55 发表于 2014-3-19 20:41
支持!顺带说一句……我可能会给你的代码进行重排版,不介意吧?

没事,万恶的十个字
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-5-2 13:14 , Processed in 0.041805 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表