Для подключения требуется клиент и сервер.
Чтобы клиент отправлял данные на сервер, клиент должен иметь адрес сервера и номер порта. Точно так же, чтобы сервер отправлял данные клиенту, сервер должен иметь адрес клиента и номер порта.
Привязка к сокету означает присвоение сокету адреса и номера порта.
Когда вы делаете:
providerSocket.bind(new InetSocketAddress("192.168.0.1", 0));
Вы получаете Already Bound
ошибку, потому что providerSocket уже имеет адрес и номер порта, и назначение нового адреса / номера порта не допускается. После создания ServerSocket он связывается (если только он не использует конструктор без параметров java.net.ServerSocket.ServerSocket () ).