Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Caracteres de 16 bits en vez de 8 bit, funcion send (https://www.clubdelphi.com/foros/showthread.php?t=77516)

cesarsoftware 03-02-2012 13:25:49

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.

cesarsoftware 04-02-2012 18:40:51

solucionado
 
Hola compis.

La solucion al problema es definir la varible cadena como "ansistring".

Código Delphi [-]
var
  cadena: ansistring;
begin
  Send(nSocket, Pointer(cadena)^, size, 0);
end;


La franja horaria es GMT +2. Ahora son las 08:22:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi