简体   繁体   English

Android NDK套接字连接问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM