Ver Mensaje Individual
  #1  
Antiguo 03-02-2012
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Reputación: 20
cesarsoftware Va por buen camino
Post Caracteres de 16 bits en vez de 8 bit, funcion send

Hola Compis.

Estoy haciendo una aplicacion via socket con winsock en delphi 2010.
El problema al que no encuentro solucion y por eso os pido ayuda (quiza porque no se plantear las busqueda en los foros y en la red) es que al enviar una cadena, se envian los caracteres como 16 bits, es decir, si quiero mandar 'Hola mundo' la funcion send para socket envia ' H o l a m u n d o'. Lo comprueba con wireshark y efectivamente lo hace asi anteponiendo un #0 antes de cada char.

La ayuda de la funcion viene en C
Código Delphi [-]
int bytesSent;
char sendbuf[32] = "Client: Sending data.";
//----------------------
// Send and receive data.
bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );
Ya he probado de todo (array of char como en el fuente C, y todo lo que se me ha ocurrido), pero no consigo lo que necesito, y eso con cadenas, cuando envie un fichero .... supongo que el problema sera justamente el doble, jejeje

Pongo el codigo (muy resumido) por si quereis hacer alguna prueba
Código Delphi [-]
uses
    winsock;
var
    nSocket: TSocket;
    remoto: sockaddr_in;
    cadena: string;
begin
    cadena := 'Hola mundo';
    nSocket := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);   
    remoto.sin_family := AF_INET;
    remoto.sin_addr.S_addr := inet_addr(PAnsiChar('192.168.0.1'));
    remoto.sin_port := htons(1080);
    if connect(nSocket, remoto, SizeOf(remoto)) <> SOCKET_ERROR then
      if Send(nSocket, Pointer(cadena)^, size, 0) <> SOCKET_ERROR then
        CloseSocket(nSocket);
end;

EDITO: estas funciones que ya usaba en delphi 7 funcionaban bien, mandaba solo los "caracteres puros" de 8 bits de ahi viene mi "problema" ahora.

Gracias aunque sea por leerme.

Un saludo.

Última edición por cesarsoftware fecha: 03-02-2012 a las 13:38:41.
Responder Con Cita