Reputation: 126
Modern programming is turning more and more frustrating. Trying to do a simple socket test app on Flutter (tested on Android). Code is simple and self explanatory:
void Connect()
{
print("connecting...");
Socket.connect("localhost", 80).then((Socket sock) {
socket = sock;
socket?.listen(dataHandler,
onError: errorHandler,
onDone: doneHandler,
cancelOnError: false);
socket?.write("GET / HTTP/1.1");
}).catchError((Object e) {
print("Unable to connect: $e");
});
}
Code throws exception. Output:
I/flutter (15930): connecting...
I/flutter (15930): Unable to connect: SocketException: OS Error: Connection refused, errno = 111, address = localhost, port = 47244
The port is always different, why TF is that happening?
Upvotes: 1
Views: 1778
Reputation: 31239
The port number in the error message is the local port and not the remote port. There are an issue about this problem here: https://github.com/dart-lang/sdk/issues/12693
In short, when connecting using TCP, you need two ports. One local which is open on your device and one remote which is the port open on the system you are trying to call. After a connection is established, the communication is going between this two port numbers.
So the error indicates that your server running on localhost:80
is refusing the connection from your application. The local port number in the error message can often just be ignored since it is not really relevant to debug most issues.
Upvotes: 3