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?