生成随机端口函数

这个函数用来生成一个随机端口,可以生成一个没有被占用的端口。

//生成随机端口
DWORD GenerateRandomPort()
{
	int nStartPort = 1000;
	int nEndPort = 10000;
	FD_SET fd_Write;
	SOCKET s;
	struct sockaddr_in server;
	struct timeval tp = { 0 };
	int ret = 0;
	unsigned long mode = 1; 
	tp.tv_sec = 0;  
	tp.tv_usec = 50; 
	FD_ZERO(&fd_Write);  
	server.sin_family = AF_INET;
	server.sin_addr.s_addr = inet_addr("127.0.0.1");
	for(nStartPort; nStartPort != nEndPort; ++nStartPort)
	{
		s=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
		FD_SET(s, &fd_Write);
		ioctlsocket(s, FIONBIO, &mode); 
		server.sin_port=htons(nStartPort);
		connect(s,(struct sockaddr *)&server,sizeof(server));
		ret=select(0, NULL, &fd_Write, NULL, &tp);  
		if(0 == ret || -1 == ret)
		{
			closesocket(s);
			WSACleanup();
			return nStartPort;
		}
		closesocket(s);
	}
	WSACleanup();
	return nStartPort;
}

转载于:https://www.cnblogs.com/lebronjames/archive/2010/10/29/1864325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值