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.";
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.