扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:童振华 来源:论坛 2007年10月21日
关键字:
IP V4专用 | 是对应的IP v4/v6通用函数 | 功能说明 |
inet_aton( ) | inet_ntop( ) | 字符串地址转为IP地址 |
inet_ntoa( ) | inet_pton( ) | IP地址转为字符串地址 |
gethostbyname( ) | Getipnodebyname( ) | 由名字获得IP地址 |
gethostbyaddr( ) | struct hostent *getipnodebyaddr( ) | IP地址获得名字 |
getaddrinfo( ) | 获得全部地址信息 | |
getnameinfo( ) | 获得全部名字信息 | |
未发生变化的函数 | 功能说明 | |
socket( ) | 建立Socket | |
bind( ) | Socket与地址绑定 | |
send( ) | 发送数据(TCP) | |
sendto( ) | 发送数据(UDP) | |
receive( ) | 接收数据(TCP) | |
recv( ) | 接收数据(UDP) | |
accept( ) | 接收连接 | |
listen( ) | 网络监听 |
#include <winsock2.h> #include <ws2tcpip.h> #include "tpipv6.h" // Form IPv6 Tech Preview.(可以从tpipv6-001205-SP3-IE6安装后所在目录里找到) #pragma comment(lib,"ws2_32")//引入库函数。 |
memset(&hints,0,sizeof(hints)); //hints.ai_family=PF_UNSPEC;//这样可以由系统自己进行判断,这里我们直接指定是IPV6 hints.ai_family=AF_INET6;//指定用IPV6协议 hints.ai_socktype=SOCK_DGRAM; hints.ai_protocol=IPPROTO_UDP;//用UDP hints.ai_flags=AI_NUMERICHOST;//IP用数字表示 rc=getaddrinfo((LPCTSTR )m_send,"2000",&hints,&res);//解析地址 if(rc!=0) { AfxMessageBox("fail"); return; } s_send=socket(res->ai_family,res->ai_socktype,res->ai_protocol);//建socket if(s_send==INVALID_SOCKET) { AfxMessageBox("建本机发socket失败");return ;} else { AfxMessageBox("建本机发socket成功"); //绑定本地监听端口bind if(bind (s_send,res->ai_addr,res->ai_addrlen)==SOCKET_ERROR) AfxMessageBox("bind失败"); else {AfxMessageBox("bind成功");GetDlgItem(IDOK)->EnableWindow (TRUE); } } if ( WSAAsyncSelect( s_send, m_hWnd, UM_PACKET, FD_READ ) == SOCKET_ERROR )//异步选择 { MessageBox( "WSAAsyncSelect failed" ); closesocket( s_send ); return; } |
hints.ai_family=AF_INET6; hints.ai_socktype=SOCK_DGRAM; hints.ai_protocol=IPPROTO_UDP;//这里也可以改为0,让系统自己选 hints.ai_flags=AI_NUMERICHOST; rc=getaddrinfo((LPCTSTR )m_receive,"2000",&hints,&res);//解析对方收地址 if(rc!=0) { AfxMessageBox("fail"); return; } rc=sendto(s_send,m_sendtxt,m_sendtxt.GetLength(),0,res->ai_addr,res->ai_addrlen); if (rc== SOCKET_ERROR) { AfxMessageBox("发送失败"); closesocket(s_send); } else { AfxMessageBox("发送成功"); } |
{ char sBuf[128]; sockaddr_in6 sa; int iAddrLen=sizeof( sa ); int a=sizeof(sockaddr); ZeroMemory( &sa, sizeof( sa ) ); memset(&sBuf,0,sizeof(sBuf)); int iLen = recv(s_send, sBuf, sizeof(sBuf),0);//for win2k use recv if(iLen<0) { fprintf(stderr,"recvfrom failed with error %d: %s\n",)WSAGetLastError(), DecodeError(WSAGetLastError())); return 0; } else { sBuf[iLen] = 0; CString sText; char lpszAddressString[1000]; DWORD dwAddressStringLength=1000; rc=WSAAddressToString((sockaddr*)&sa,sizeof(sa),NULL,lpszAddressString,&dwAddressStringLength ); sText.Format( "recved [%s]", sBuf);//,sa.sin6_family==AF_INET6,lpszAddressString);//for win2k m_reclist.AddString( sText ); return 0; } } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者