自己写的一个网络程序,想测试一下外网,于是就映射了外网端口到本地的机器上,确认映射成功了,因为在单位的机器上我能连接上这个端口。但是回到家里,用家里的内网连接这个映射端口却出现了10054的错误,一直连接不上。而且我两台内网机器都连接不上这个端口。详细网络结构如下:
外网的一个路由器,映射了10010端口,我在内网中的任意一个机器bind了其他端口(如:10020)去连接  【外网ip】【10010】,返回10054,连接被重置我的绑定代码如下:
m_udpsock = INVALID_SOCKET;
m_udpsock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

if(m_udpsock == INVALID_SOCKET)
{
cout<<"udp socket create failed,UDPSocket::start"<<endl;
return 0;
}
      
        BOOL bReuseaddr=TRUE;
setsockopt(m_udpsock,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));

m_UDPRecv_Addr.sin_family = AF_INET;
//m_UDPRecv_Addr.sin_addr = *((struct in_addr *)hostinfo->h_addr); 
m_UDPRecv_Addr.sin_addr.s_addr = 0;
m_UDPRecv_Addr.sin_port = htons(port);

if(SOCKET_ERROR == bind(m_udpsock, (SOCKADDR *) &m_UDPRecv_Addr, sizeof(SOCKADDR)))
{
cout<<"udp bind error,UDPSocket::start"<<endl;
closesocket(m_udpsock);
return 0;
}到底怎么回事?是不是内网的机器就连不上自己路由的映射端口,照理说不应该会这样的,希望大家给参谋下!谢谢

解决方案 »

  1.   

    外网ip是不是变了,确定路由器的公网ip是不是自动获得的?
      

  2.   

    ip地址没有变,关于防火墙的问题,我能从其他的ip访问到啊。例如,我可以在公司的机器登陆到这个端口上,应该不会是防火墙有问题吧?
      

  3.   

    要确定公网IP是正确的,映射端口内外设置成一样,如果不行就有可能是路由防火设置了规则,我对公司的路由映射过,外网TCP能连接进来,但是一下子又断了,再连,还是一下子又断了,我怀疑是他们设置了什么规则^_^
      

  4.   

    这就对了,家里的电脑不能通过外网IP+端口映射的方式访问局域网内机器,我也试过同样的情况。必须用内网IP访问。
      

  5.   

    bind到映射的端口试试,我的是成功的。
      

  6.   

    BIND的端口跟映射的端口设置成一样的试试 另外你确定你的内网能连外网吗?
      

  7.   

    我内网能上网的,可以bind到外网端口吗?等我晚上回去试试看,谢谢~