www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - como eliminar los caracteres nulos de las respuestas en socket?

reply Espartan Jhon <dnce1029 gmail.com> writes:
hola a todos quisiera saber como es que puedo eliminar los 
caracteres nulos de las respuestas de mi socket




/*+

ESTE ES EL ARCHIVO EN LIMPIO

+*/

import std;
import std.concurrency;
import std.algorithm: countUntil;

import std.system;

alias print = writeln;

void conexion();
void server_esucha(ushort);



void main(){

	server_esucha(5500);

}

void server_esucha (ushort puerto ) {

	// limpieza de la pantalla
	//execute("clear").writeln;

	//auto server = new TcpSocket(); // ip "0.0.0.0"
	auto server = new Socket(AddressFamily.INET, SocketType.STREAM);
	print(" [-] Nuevo servidor en el protocolo 0.0.0.0");

	ushort port = puerto;

	auto address = new InternetAddress(port);
	server.bind(address);
	print(" [-] puerto de server 5500");


	server.listen(1); // coloca el servidor en escucha
	print(" [-] servidor en escucha ...");

	while (true) {

		print(" [-] esperando a las jugadoras ");

		auto client = server.accept();  // servidor en espera de 
aceptar jugadores

  		// establecemos conexciones en un hilo diferente, para estar 
siempre en escucha y conectar hosts
		task!conexion(client).executeInNewThread(); // establecer una 
conexcion con las jugadoras

		print(" [+] servidor creado ");

	}

}

void conexion(Socket c){

	print(" [-] Cliente 1 conectado ... ");

	
	char[1000] cadena;

	auto mensaje = c.receive(cadena); // esta linea me devuelve el 
mensaje mas caracteres nulos



	





}





y este codigo es de mi cliente

import std;
import std.socket;

alias print = writeln;

void main() {	

	auto socket = new TcpSocket();

	socket.connect(new InternetAddress("192.168.0.13", 5500));

	socket.send("hallo weltas");

	socket.close();



}















	
Mar 27 2023
parent Steven Schveighoffer <schveiguy gmail.com> writes:
On 3/27/23 1:13 PM, Espartan Jhon wrote:
 hola a todos quisiera saber como es que puedo eliminar los caracteres 
 nulos de las respuestas de mi socket
In English (via google translate): Hello everyone, I would like to know how I can remove null characters from my socket responses My response in English: You should not be getting null characters from that code, it's sending the string, but the string has no null characters in it. However, I see you are reading into a static buffer. That static character buffer has already-defined characters in it. If you use the whole buffer, it will include those characters (they are not null, but `0xff`). The return value from `receive` is the number of characters written. Try instead: ```d auto nchars = c.receive(cadena); if(nchars < 0) { /* error */ } auto mensaje = cadena[0 .. nchars]; // real message ``` Traducido al español (con traductor de google): No debería obtener caracteres nulos de ese código, está enviando la cadena, pero la cadena no tiene caracteres nulos. Sin embargo, veo que está leyendo en un búfer estático. Ese búfer de caracteres estáticos tiene caracteres ya definidos. Si usa todo el búfer, incluirá esos caracteres (no son nulos, sino `0xff`). El valor de retorno de `receive` es el número de caracteres escritos. Prueba en su lugar: ```d auto nchars = c.receive(cadena); if(nchars < 0) { /* error */ } auto mensaje = cadena[0 .. nchars]; // mensaje real ``` -Steve
Mar 27 2023