[英]Android NDK socket connectivity issues
Ok, so I'm able to create a listening socket in my Android App using the following code: 好的,因此我可以使用以下代码在Android应用中创建监听套接字:
bool CSocket::tcplisten(int port, int max, int mode)
{
if((sockid = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) return false;
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(port);
if(mode)setsync(1);
if(bind(sockid, (struct sockaddr*)&addr, sizeof(sockaddr)) == SOCKET_ERROR)
{
closesocket(sockid);
return false;
}
if(listen(sockid, max) == SOCKET_ERROR)
{
closesocket(sockid);
return false;
}
return true;
}
I am then able to connect to it in the SAME process using the following code: 然后,我可以使用以下代码在SAME进程中连接到它:
bool CSocket::tcpconnect(char *address, int port, int mode)
{
sockaddr_in addr;
hostent* hostEntry;
if((sockid = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)
return false;
if((hostEntry = gethostbyname(address)) == NULL)
{
closesocket(sockid);
return false;
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons((u_short)port);
if(mode ==2)setsync(1);
if(connect(sockid, (struct sockaddr*)&addr, sizeof(sockaddr)) == SOCKET_ERROR)
{
closesocket(sockid);
return false;
}
if(mode ==1)setsync(1);
return true;
}
The problem is, I am unable to connect to other machines running a listening socket or on remote machines like google.com. 问题是,我无法连接到运行侦听套接字或在google.com等远程计算机上的其他计算机。 Any ideas why I can't get it to work? 有什么想法为什么我不能使它工作?
After some tweaking and probing, I found that the error occurs at the line: 经过一些调整和探测后,我发现该错误发生在以下行:
if(connect(sockid, (struct sockaddr*)&addr, sizeof(sockaddr)) == SOCKET_ERROR)
{
closesocket(sockid);
return false;
}
The errno is 111 ERCONNREFUSED... Please. errno是111 ERCONNREFUSED ...请。 ANY help would be appreciated. 任何帮助,将不胜感激。 The application has full Internet access set in the permissions.... Any ideas? 该应用程序具有在权限中设置的完全Internet访问权限。...有什么想法吗?
I have the same issues with my Linux build compiled with the same code... 我的Linux构建使用相同的代码编译时遇到相同的问题...
You are trying to connect to INADDR_ANY. 您正在尝试连接到INADDR_ANY。 You want to copy the relevant part of the hostent into addr.sin_addr.s_addr. 您想要将主机的相关部分复制到addr.sin_addr.s_addr中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.