Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-02-2012
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
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
  #2  
Antiguo 04-02-2012
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
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;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar varible de 16 bits a dos de 8 bits bactering C++ Builder 7 04-11-2010 04:44:33
Como ejecutar aplicativos dbExpress de 32 bits en 64 bits rolandoj Conexión con bases de datos 0 30-07-2010 19:39:07
Función que elimine caracteres blancos!!! Sole_l Varios 2 01-04-2009 09:16:46
Aplicaciones de 32 bits en Windows de 64 bits Gabo Debates 9 25-09-2008 20:49:32
Necesito función para modificar carácteres. samsagaz Varios 5 27-10-2007 11:04:37


La franja horaria es GMT +2. Ahora son las 09:59:08.


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