我需要启动一系列的侦听,每个侦听都需要侦听不同的端口,端口可以随机获得,只要求没有被占用即可。
我用的这种办法来获得,但是总是出现问题。unsigned long l_nPort = 9001;
for (; l_nPort<9100; l_nPort++)
{
SOCKET l_sListen;
l_sListen = socket(PF_INET, SOCK_STREAM, 0);
if( l_sListen == -1 )
{
l_nPort --;
continue;
}
struct sockaddr_in SERVER;
SERVER.sin_family = PF_INET;
SERVER.sin_addr.s_addr = INADDR_ANY;
SERVER.sin_port =htons((unsigned short)l_nPort);
if(bind(l_sListen,(struct sockaddr *) &SERVER,sizeof(SERVER)))
{
closesocket(l_sListen);
continue;
}
else
{
BOOL l_bDontLinger = FALSE;
setsockopt(l_sListen,SOL_SOCKET,SO_DONTLINGER,(const char*)&l_bDontLinger,sizeof(BOOL));
closesocket(l_sListen);
break;
}
}
startListen(pFTNI,pcFile, l_nPort);总是出现问题,后面bind这个端口的时候,报10048错误,我查了一下说是端口只能被使用一次。
想请教一下是什么地方出现了错误?
我用的这种办法来获得,但是总是出现问题。unsigned long l_nPort = 9001;
for (; l_nPort<9100; l_nPort++)
{
SOCKET l_sListen;
l_sListen = socket(PF_INET, SOCK_STREAM, 0);
if( l_sListen == -1 )
{
l_nPort --;
continue;
}
struct sockaddr_in SERVER;
SERVER.sin_family = PF_INET;
SERVER.sin_addr.s_addr = INADDR_ANY;
SERVER.sin_port =htons((unsigned short)l_nPort);
if(bind(l_sListen,(struct sockaddr *) &SERVER,sizeof(SERVER)))
{
closesocket(l_sListen);
continue;
}
else
{
BOOL l_bDontLinger = FALSE;
setsockopt(l_sListen,SOL_SOCKET,SO_DONTLINGER,(const char*)&l_bDontLinger,sizeof(BOOL));
closesocket(l_sListen);
break;
}
}
startListen(pFTNI,pcFile, l_nPort);总是出现问题,后面bind这个端口的时候,报10048错误,我查了一下说是端口只能被使用一次。
想请教一下是什么地方出现了错误?
解决方案 »
- Release比Debug大
- 怎么改变CTreeCtrl的滚动条的大小
- 怎么响应多文档窗口最小化消息呢?
- MDI程序的子窗口切换及使用不同Toolbar问题?
- 中文显示问题
- ldap ssl连接问题 ,openldap达人请入,解决500分,决不食言!
- 怎麼寫發E-mail??Winsock? SMTP?要寫客戶/服務器兩端碼?
- 网上有什么项目是由网友共同开发的呀(VC或C++的都可以)?我也想接一部分来做,锻炼锻炼嘛!
- 哪里有电子版的《windows程序设计》,100分相送。
- C++类后的字符有何作用
- Dialog上作图
- 在onpaint函数里面启动了一个线程,为什么还没干完事情,自己就结束了?
setsockopt(l_sListen,SOL_SOCKET,SO_DONTLINGER,(const char*)&l_bDontLinger,sizeof(BOOL));因该是端口还没有被完全关闭,可以把上面的代码改一改BOOL l_bLinger = TRUE;
setsockopt(l_sListen,SOL_SOCKET,SO_LINGER,(const char*)&l_bLinger ,sizeof(BOOL));改成这样子,端口将被强制关闭
SERVER.sin_family = PF_INET;
SERVER.sin_addr.s_addr = INADDR_ANY;
SERVER.sin_port =0;
if(bind(l_sListen,(struct sockaddr *) &SERVER,sizeof(SERVER)))
{绑定 0端口就是 绑定一个未占用的端口
to thirddata:
我试试呵~
to abomber2:
额,这样子我可以知道我是绑定的哪个端口吗?
貌似没有用的~还是那样子。