套接字连接在仿真器中成功,但在移动设备中显示错误

时间:2018-07-18 11:39:41

标签: android c++ sockets tcp

我正在创建2个套接字。客户端是一个Android应用,服务器代码是用C ++编写的。

要创建套接字: 在应用中:

socket = new Socket("192.168.1.1", 5026);
socket1 = new Socket("192.168.1.1", 5050);

在服务器端:

int sock::create_sock(int port_no, bool blocking)
{
    int sockfd, newsockfd;
    int portno = port_no;
    socklen_t clilen;
    struct sockaddr_in serv_addr, cli_addr;
    int n;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");

    int enable = 1;

    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0)
        error("setsockopt(SO_REUSEADDR) failed");

    bzero((char *)&serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);

    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
        error("ERROR on binding");

    listen(sockfd, 5);
    clilen = sizeof(cli_addr);

    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    if (newsockfd < 0)
        error("ERROR on accept");

    if (blocking == false)
    {
        fcntl(newsockfd, F_SETFL, O_NONBLOCK);  // Change the socket into non-blocking state
        cout << "Creating non-blocking socket " << endl;
    }

    printf("server: got connection from %s port %d\n", inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port));

    close(sockfd);
    return newsockfd;
}

应用程序中有一个连接按钮。单击该按钮后,对运行Java代码的套接字进行创建。

现在问题是该应用程序在模拟器中运行良好。无论我按多少次连接,两个插座都已连接。但是当我在移动设备上运行时,它只能连接一次。在随后单击连接按钮时,仅创建第一个套接字,第二个套接字停止,然后再接受服务器中的功能。

0 个答案:

没有答案