CSocket在LAN上不起作用

时间:2016-05-23 07:20:39

标签: c++ networking mfc network-programming winsock2

我正在学习网络编程,并尝试开发一个使用MFC的CSocket类的简单套接字应用程序。并发现自己撞墙需要一些帮助。

我希望服务器端侦听某个端口,例如1001。然后从其他计算机上,在同一个子网上,它应该成功远程登录到该端口。我的程序在localhost上正常工作,但在LAN上失败,虽然我在侦听器的防火墙上打开了该端口。

这是我的听众代码:

//CListenSocket is derived from CSocket
CListenSocket myListener;
myListener.Create(1001);    
myListener.Listen();

//OnAccept()
  //CConnectSocket is also derived from CSocket
CConnectSocket myConnect;
myListener.Accept(myConnect);

我使用VS2008构建了发布版本,这是配置属性的屏幕截图: my program build's configuration 所以在这个阶段,当我运行程序时,netstat -an显示这一行:

TCP    0.0.0.0:1001           0.0.0.0:0              LISTENING

然后在该计算机telnet 127.0.0.1 1001上显示此行。

 TCP    127.0.0.1:1001         127.0.0.1:2681         ESTABLISHED

所以我认为我的代码是正确的。之后我尝试从其他机器使用相同的子网,telnet失败:

Connecting To 192.168.2.199...Could not open connection to the host, on port 1001: Connect failed

注意:我的监听器位于192.168.2.199,连接器位于192.168.2.3。两个节点都可以成功ping通并相互共享文件。我还为防火墙上的程序添加了Inbound RuleOutbound Rule,以下是规则的属性: My rule for the program

有关详细信息:在我的侦听器节点上,安装了Apache HTTP服务器,因此我将另一个节点telnet连接到端口80,并且它可以工作...

那我在哪里错过了?请帮忙,提前谢谢。

第1版: 尝试进行问题排查 所以在我把头撞到桌子上一段时间之后,我很快就决定不再使用telnet作为客户了。但是制作一个小型客户端程序来捕获错误:

//CClientSocket is derived from CSocket
CClientSocket clientSocket;
clientSocket.Create();
int iConnect = clientSocket.Connect(ipAddress,1001) //ipAddress is a variable of MFC's text box on GUI.

switch (iConnect)
{
case 0:
    {
        DWORD errorNumber = ::GetLastError();   //catch error code
        CString s_errorNumber;                
        s_errorNumber.Format("%d",errorNumber); //format to CString for easy echo
        MessageBox("Connection fail :"+s_errorNumber)
        clientSocket.ShutDown(CAsyncSocket::both);
        clientSocket.Close();
        break;
case SOCKET_ERROR:
    if (::GetLastError() != WSAEWOULDBLOCK) 
        clientSocket.ShutDown(CAsyncSocket::both);
    else
        clientSocket.AsyncSelect();
    break;
default:
    {
        MessageBox("Connection Established.");
    }
    break;  
}

错误编号为:10061。我在MSDN上检查了此代码,它是WSAECONNREFUSED - 拒绝连接。

现在我们知道这里的问题一定是在监听器的防火墙的某个地方......仍然把我的脑袋拉到桌面上。

0 个答案:

没有答案