应该是大家常常遇到的问题
一调试通过就给分!
通常bind时会返回WSAEADDRINUSE就是端口已经被占用了。
m_pListen = new CListenSocket( this );
if ( m_pListen )
{
if ( m_pListen->Create( 80, SOCK_STREAM, FD_ACCEPT ) ) bOk = m_pListen->Listen();
if ( !bOk )
{
CString strMsg;
int nErr = m_pListen->GetLastError();
if ( nErr == WSAEADDRINUSE )
strMsg.Format( IDS_LISTEN_INUSE, m_uPort );
else
strMsg.Format( IDS_LISTEN_ERROR, m_uPort );
//80,如果被占用,Error!!!!!!!!
AfxMessageBox( strMsg, MB_OK|MB_ICONSTOP );
m_pListen->Close();
delete m_pListen;
m_pListen = NULL;
}
}
对呀,知道端口被占用简单,怎么知道端口被哪个程序占用呢?有的防火墙,能看到哪个程序,开哪些端口。就绿盟那个防火墙就是一个例子。