自己写的一个网络程序,想测试一下外网,于是就映射了外网端口到本地的机器上,确认映射成功了,因为在单位的机器上我能连接上这个端口。但是回到家里,用家里的内网连接这个映射端口却出现了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;
}到底怎么回事?是不是内网的机器就连不上自己路由的映射端口,照理说不应该会这样的,希望大家给参谋下!谢谢
外网的一个路由器,映射了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;
}到底怎么回事?是不是内网的机器就连不上自己路由的映射端口,照理说不应该会这样的,希望大家给参谋下!谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货