Client connection timeout during Android & Windows PC communication via sockets

36 views Asked by At

I'm currently trying to make my android device and windows PC communicate with each other via sockets.

I have a problem with a connection between my android device and windows PC. Client side connection timed out. (errno 101)

I selected the android device as 'client' and the windows PC as 'server'

Here is my code for Android(client) [Using NDK]:

#define SOCKET_SERVER_IPV4_ADDR "24.133.169.180" //External IP of my windows PC (server to connect)
#define SOCKET_CONNECTION_PORT 307 (Connection port)

JNICALL extern "C" int Java_com_example_pulsarspy_MainActivity_connectionTest(JNIEnv *env, jobject /* this */){
    int connectionResult, sockFd;
    sockaddr_in serverAddr;

    sockFd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(sockFd == -1)
        return errno;

    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = inet_addr(SOCKET_SERVER_IPV4_ADDR);
    serverAddr.sin_port = htons(SOCKET_CONNECTION_PORT);

//ACTIVITY STUCKS IN HERE THEN RETURNS TIMEOUT AFTER A FEW MINUTES
    connectionResult = connect(sockFd, (sockaddr*)&serverAddr, sizeof(serverAddr));
//.....................................

    if(connectionResult == -1)
        return errno;
    else return 0;
}

Code block which initializes the server for communication (Windows PC) [Using Win32API]:

//CREATE SERVER SOCKET
serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (serverSocket == INVALID_SOCKET) {
    printf("Socket Initialization Failed. Error Code: %d\n", WSAGetLastError());
    closesocket(serverSocket);
    return -1;
}
printf("Socket Successfully Created.\n");

//INITIALIZE SOCKET SERVER ADDRESS TO BIND
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr("192.168.0.30");
serverAddress.sin_port = htons(307);

//BIND SERVER IP WITH SOCKET
bindResult = bind(serverSocket, (SOCKADDR*)&serverAddress, sizeof(serverAddress));
if (!bindResult)
    printf("Binding completed for the server.\n");
else {
    printf("Binding Socket Failed. Error Code:%d\n", WSAGetLastError());
    closesocket(serverSocket);
    WSACleanup();
    return -1;
}

//START LISTENING FOR CLIENTS
if (!listen(serverSocket, 1)) {
    printf("Listening for the clients.....\n");
}
else {
    printf("An Error Occurred During Client Listening. Error Code:%d\n", WSAGetLastError());
    closesocket(serverSocket);
    WSACleanup();
    return -1;
}

My server side runs properly and starts listening. But the client one hangs in the connect() call and returns timeout after few minutes.

I have tried searching a lot on how to communicate (transfer small amounts of data as strings) between multiple devices located in different locations using different networks via sockets, but I haven't really gotten a solution. Is there a way that I can do this?

0

There are 0 answers