IPV6 UDP编程实例 & IPV6 TCP编程实例

UdpServer.cpp

#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int main(int argc, char** argv)
{
	using namespace std;

	cout<<"Server Start..."<<endl;

	WORD wVersion = 0;
	WSADATA wsaData;
	memset(&wsaData, 0, sizeof(wsaData));
	wVersion = MAKEWORD(2, 2);

	if (0 != WSAStartup(wVersion, &wsaData))
	{
		return -1;
	}

	if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))
	{
		WSACleanup();
		return -1;
	}

	struct addrinfo hints;
	struct addrinfo* res = NULL;
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_DGRAM;
	hints.ai_protocol = IPPROTO_UDP;
	hints.ai_flags = AI_PASSIVE;

	if (0 != getaddrinfo("192.168.0.19", "6677", &hints, &res))
	{
		WSACleanup();
		return -1;
	}

	SOCKET sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 
	bind(sk, res->ai_addr, res->ai_addrlen);

	char recvBuf[1024] = {'\0'};
	int lenRecv = 0;

	struct sockaddr_storage storage;
	int len = sizeof(storage);
	memset(&storage, 0, len);

	lenRecv = recvfrom(sk, recvBuf, 1024, 0, (struct sockaddr*)&storage, &len);
	cout<<"Recv From Client:"<<recvBuf<<" Len:"<<lenRecv<<endl;
	sendto(sk, recvBuf, lenRecv, 0, (struct sockaddr*)&storage, len);

	WSACleanup();
	closesocket(sk);

	return 0;
}

UdpClient.cpp

#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int main(int argc, char** argv)
{
	using namespace std;

	cout<<"Client Start..."<<endl;

	WORD wVersion = 0;
	WSADATA wsaData;
	memset(&wsaData, 0, sizeof(wsaData));
	wVersion = MAKEWORD(2, 2);

	if (0 != WSAStartup(wVersion, &wsaData))
	{
		return -1;
	}

	if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))
	{
		WSACleanup();
		return -1;
	}

	struct addrinfo hints;
	struct addrinfo* res = NULL;
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_DGRAM;
	hints.ai_protocol = IPPROTO_UDP;
	hints.ai_flags = AI_CANONNAME;

	if (0 != getaddrinfo("192.168.0.19", "6677", &hints, &res))
	{
		WSACleanup();
		return -1;
	}

	SOCKET sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 
	bind(sk, res->ai_addr, res->ai_addrlen);

	char recvBuf[1024] = {'\0'};
	char sendBuf[1024] = {"abcd"};
	int len = res->ai_addrlen;
	int lenRecv = 0;

	sendto(sk, sendBuf, strlen(sendBuf), 0, res->ai_addr, len);
	lenRecv = recvfrom(sk, recvBuf, 1024, 0, res->ai_addr, &(len));
	cout<<"Recv From Server:"<<recvBuf<<" Len:"<<lenRecv<<endl;

	WSACleanup();
	closesocket(sk);

	return 0;
}


========================================================================

TcpServer.cpp

#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int main(int argc, char** argv)
{
	using namespace std;

	cout<<"Server Start..."<<endl;

	WORD wVersion = 0;
	WSADATA wsaData;
	memset(&wsaData, 0, sizeof(wsaData));
	wVersion = MAKEWORD(2, 2);

	if (0 != WSAStartup(wVersion, &wsaData))
	{
		return -1;
	}

	if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))
	{
		WSACleanup();
		return -1;
	}

	struct addrinfo hints;
	struct addrinfo* res = NULL;
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;
	hints.ai_flags = AI_PASSIVE;

	if (0 != getaddrinfo(NULL, "6677", &hints, &res))
	{
		WSACleanup();
		return -1;
	}

	SOCKET sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 

	bind(sk, res->ai_addr, res->ai_addrlen);

	if (0 != listen(sk, 5))
	{
		WSACleanup();
		closesocket(sk);
		return -1;
	}

	struct sockaddr_storage storage;
	int len = sizeof(storage);
	memset(&storage, 0, len);

	SOCKET newSk = accept(sk, (struct sockaddr*)&storage, &len);
	closesocket(sk);

	char recvBuf[1024] = {'\0'};
	int lenRecv = 0;
	lenRecv = recv(newSk, recvBuf, 1024, 0);
	cout<<"Recv From Client:"<<recvBuf<<" Len:"<<lenRecv<<endl;
	send(newSk, recvBuf, lenRecv, 0);

	WSACleanup();
	closesocket(newSk);

	return 0;
}

TcpClient.cpp

#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")

int main(int argc, char** argv)
{
	using namespace std;

	cout<<"Client Start..."<<endl;

	WORD wVersion = 0;
	WSADATA wsaData;
	memset(&wsaData, 0, sizeof(wsaData));
	wVersion = MAKEWORD(2, 2);

	if (0 != WSAStartup(wVersion, &wsaData))
	{
		return -1;
	}

	if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))
	{
		WSACleanup();
		return -1;
	}

	struct addrinfo hints;
	struct addrinfo* res = NULL;
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;
	hints.ai_flags = AI_CANONNAME;

	if (0 != getaddrinfo("123.123.123.19", "6677", &hints, &res))
	{
		WSACleanup();
		return -1;
	}

	SOCKET sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 

	if (0 != connect(sk, res->ai_addr, res->ai_addrlen))
	{
		WSACleanup();
		closesocket(sk);
		return -1;
	}

	char sendBuf[1024] = {"abcdef"};
	char recvBuf[1024] = {'\0'};
	int lenRecv = 0;

	send(sk, sendBuf, strlen(sendBuf), 0);
	lenRecv = recv(sk, recvBuf, 1024, 0);
	cout<<"Recv From Server:"<<recvBuf<<" Len:"<<lenRecv<<endl;
	

	WSACleanup();
	closesocket(sk);

	return 0;
}





























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SixMan 这是上次IPv6文件传输的升级版,新特性如下: 1.加入了即时通信,也许只是鸡肋,大家别BS我啊 2.支持文件夹传输 3.解决上一版中,有些情况下只能单向传文件的重大缺陷,现在只要双方建立了连接,无论哪方发起的连接,只要连接建立就能互传文件... 使用方法: 点击 添加用户-> 双击“新加入的用户” -> 在弹出的聊天窗口 输入 对方(不是你自己的) IP(v6) -> 点击 连接 -> 等待连接成功后 即可 发送文件时 只需将待发送的文件(夹)拖拽的窗口即可 点击 查看本机IP 按键可以查看本机的IP地址信息,其结果取自在cmd窗口运行ipconfig命令的结果 设置按钮里 可以修改昵称 有朋友说还要知道对方IP才能连接,太麻烦了... 问这个问题的朋友可能不太了解现在的网络协议等相关知识,没有网络地址是无法通信的,两个点要想通信必须要知道对方网络地址才行, 可能有朋友不服气,说为什么QQ就不用,这个问题只要懂一点计算机知识的人都知道,人家腾讯有钱,把用户登录服务放在一个有着固定公网 IP的服务器上,这个IP永不会变,你的QQ客户端内部是集成了这个IP的,所以你登陆时不需要你输入IP,而且所有QQ用户都是通过这一个服务器登录, 腾讯的数据库保存着所有QQ用户的个人信息和好友列表... 我可没有钱去置办那么庞大的服务器和数据库,而且我的软件不是QQ那样的商业软件,不过是为了解决平时一些应用而开发的一款小工具,应用范围是不同于 QQ的,也根本不是用来代替QQ的.... 注意: 假设A和B通信 那么只要A连接到B 或者 B连接到A 即可,无需双向连接,连接后即可双向传文件 有时连接不成功可以换一个IP(v6)地址,一般情况下会有多个IPv6地址,一个不行换一个试试,再不行要关闭防火墙。 遇到问题可以找客服 QQ:191730977 Email: acmtiger@gmail.com 感谢大家的支持!
### 回答1: IPv6是Internet协议第6版的简称,它是目前互联网上使用的IP协议的最新版本。IPv6的主要优势是它的地址空间更大,可以支持更多的设备连接到互联网上。 在IPv6的使用中,TCPUDP依然是最常用的传输协议。为了测试IPv6TCPUDP的性能,我们需要使用专门的IPv6 TCP/UDP测试工具。 目前市场上免费的IPv6 TCP/UDP测试工具很多,比较常用的有:Nuttcp、Netperf、Ttcp、Iperf等。 其中,Nuttcp和Ttcp主要用于性能基准测试,通过测试网络的最大吞吐量、数据包大小、延迟等指标来评估网络的性能。而Netperf和Iperf则更为全面,可以测试网络性能的多个维度,例如:TCP/UDP吞吐量、带宽、延迟、网络抖动等。 无论使用哪种测试工具,我们都应该选择适合自己测试要求的工具,并参考相关文档详细了解测试方法和参数设置,从而得到准确的测试结果。 ### 回答2: IPv6 TCP/UDP测试工具是一种用于测试IPv6网络的工具。IPv6是下一代互联网协议,用于取代IPv4。IPv6允许更多设备接入网络,同时也提供更强的安全性和更快的网络速度。 IPv6 TCP/UDP测试工具可以测试IPv6网络的连接速度、稳定性、延迟等参数。它主要通过向目标服务器发送数据并监测接收到的响应时间来评估网络的性能。测试的结果可以用于判断网络质量,优化网络结构,提高网络效率和可靠性。 常用的IPv6 TCP/UDP测试工具包括iperf、netcat、tcpdump、wireshark等。这些工具可以在不同的操作系统上运行,包括Windows、Linux、Mac等。 虽然IPv6已经很普及,但由于各种原因,IPv4网络仍然存在。因此,在测试IPv6网络之前,需要确认网络中所用的协议类型。如果网络中存在IPv4设备,那么IPv6 TCP/UDP测试工具可能会无法正常工作。 总之,IPv6 TCP/UDP测试工具是一种非常有用的工具,它可以帮助用户评估IPv6网络的性能,找出网络中的问题,并进行相应的优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值