Olá, você ta criando um chat com websocket, certo? caso sim você pode fazer o seguinte:
// exemplo que usa socket.io
// https://socket.io/docs/v4/client-api/
import { io } from "https://cdn.socket.io/4.4.1/socket.io.esm.min.js";
const input = document.querySelector("#input_ip");
const button = document.querySelector("#connect");
function connect() {
var ip = input.value; // obtenha o ip atráves de um input, como: 192.168.0.1:8080
const socket = io(ip, { reconnection: false });
if (socket.connected) return socket;
else throw "Invalid IP";
}
button.onclick = () => {
const socket = connect();
// determine os listeners!
socket.on("connect", () => console.log(socket.id + " | connected"));
socket.on("message", ...);
}
Ou seja você pode pegar um IP pelo um input tentar conectar e caso conseguir conectar setar os eventos.
Sobre o firewall, em todo servidor local é necessário permitir o app no firewall.
exemplo: um servidor LAN de minecraft, você tem que permitir o Java(TM) Platform SE binary.
Outra coisa é o usuário host tem que estar com um servidor websocket ligado, para fazer que ele não precise de ter o ambiente da linguagem instalada em sua máquina é necessario gerar um arquivo executável de um servidor.