EDITAR: Estoy desesperado por hacer esto para poder pasar a un nuevo proyecto, aquí está la fuente: https://github.com/eanlockwood/TalkmonClient
Todo lo demás funciona bien. El servidor conoce muy bien los nombres de usuario asociados con los clientes y les envía información en consecuencia, pero lo extraño es que la cadena se corta después de la primera variable. Aquí está el bucle para un mensaje de envío típico:
function SendMessage(msg, client) { const clientName = ClientNames.get(client); let recieverMsg = `${clientName}: ${msg}`; console.log(recieverMsg); Clients.forEach(elm => { if(elm != client) { elm.write(recieverMsg); } else { elm.write("You: " + msg); } }) }msg es el chunk.toString() en el evento socket.on('data'), nuevamente, el nodo capta lo que significa esta cadena, se depura bien pero en el cliente (imagine el cmd de Windows) solo imprimirá el nombre de usuario y listo a la siguiente línea.
El bucle para el lado del cliente también es bastante simple,
char buff[4090]; do { ZeroMemory(buff, 4090); int messageRevieved = recv(sock, buff, 4090, 0); if (messageRevieved > 0) { userInput->FreezeInput(); cout << buff << endl; userInput->UnFreezeInput(); } } while (0 == 0);La entrada del usuario se maneja en su propia clase en un hilo separado, nuevamente, funciona bien.
Creo que tiene que ver con un malentendido de lo que realmente hacen socket.write y recv o tal vez simplemente no entiendo las cadenas de JavaScript lo suficiente. De cualquier manera, este problema es molesto porque es el último paso para crear mi aplicación.
También he hecho algunas pruebas exhaustivas, realmente no le gustan las cadenas de concatenación. Imprimirá todo hasta la primera variable, lo que significa que podría tener socket.write("jejejejejeje" + variable1 + "kadjgkdgad"); e imprimiría jejejejeje [valor de variable1] y simplemente se detendría
Tl; dr: El servidor escribirá en los sockets hasta la primera variable en una cadena concatenada y luego se detendrá, es muy extraño.
EDITAR: Las dependencias utilizadas en el servidor son Net y dotnet si eso marca la diferencia.
EDIT 2: Encontré otro problema. Después de enviar algunos mensajes, el cliente que envió los mensajes dejará de imprimir la parte "usted:" y solo imprimirá el mensaje, también lo hará del lado del servidor, pero es extraño porque los clientes receptores todavía imprimirán de quién es el mensaje. .