Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   enviar string cliente-servidor (https://www.clubdelphi.com/foros/showthread.php?t=37888)

cocke 25-11-2006 05:17:44

enviar string cliente-servidor
 
Hola a todos!!
Estoy desarrollando un programa estilo cliente servidor que se conecta mediando tcp/ip y envia strings desde el cliente al servidor, y este ultimo lo guarda en un archivo.
La conexion ya la implemente y funciona bien, pero en un comienzo, para probar los datos que recibia el servidor, cree en el cliente 3 text-edit, los cuales tambien estaban en el servidor y recibian un string en el text-edit1, un numero entero y un numero flotante en los 2 text-edit siguientes.
El problema se origina cuando quiero enviar 3 string, ya que los sigue reconociendo como 1 string, 1 int y 1 float.
He revisado bastantes veces el programa, tanto cliente como servidor, pero no puedo encontrar el error.

Envio el codigo del cliente y del servidor, los cuales son pequeños.

Espero me puedan ayudar :(

Muchas Gracias :)

Saludos..

Código:

CLIENTE---->
 
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct DATOS_COM          // crea una estructura llamada dato_personales
{                        // que esta conformada por:
    char razon_social[20];      // un puntero a char (permite iniciar cadenas)
    char giro[20];
    char rut[20];
    char fono[20];
    char direccion[20];
    char ciudad[20];
    char comuna[20];
    char factura_n[20];
    char cantidad[20];
    char detalle[20];
    char precio_unitario[20];
    char precio_venta[20];
    //int edad;            // un entero
    //float altura;        // un numero de punto flotante
};
typedef struct DATOS_COM DATOS_COM;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ClientSocket1->Host = String( Edit1->Text );
    ClientSocket1->Port = StrToInt( Edit2->Text );
    ClientSocket1->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    Label1->Caption = "Conectado";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    String  buffer;
    DATOS_COM datos_enviados;

    buffer = Edit3->Text;
    strcpy(datos_enviados.razon_social,buffer.c_str());

    buffer = Edit4->Text;
    strcpy(datos_enviados.giro,buffer.c_str());

    buffer = Edit5->Text;
    strcpy(datos_enviados.rut,buffer.c_str());
 
 
    Form1->ClientSocket1->Socket->SendBuf(&datos_enviados);

Código:

SERVIDOR ------->
 
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ServForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int cont=0;

struct DATOS_COM          // crea una estructura llamada dato_personales
{                        // que esta conformada por:
    char razon_social[20];      // un puntero a char (permite iniciar cadenas)
    char giro[20];
    char rut[20];
    char fono[20];
    char direccion[20];
    char ciudad[20];
    char comuna[20];
    char factura_n[20];
    char cantidad[20];
    char detalle[20];
    char precio_unitario[20];
    char precio_venta[20];
    //int edad;            // un entero
    //float altura;        // un numero de punto flotante
};
typedef struct DATOS_COM DATOS_COM;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (Button1->Tag == 0)
    {
        Form1->ServerSocket1->Port = StrToInt( Label2->Caption );
        Form1->ServerSocket1->Active = true;
        Button1->Caption = "Desconectar";
        Button1->Tag = 1;
    }
    else
    {
        Form1->ServerSocket1->Active = false;
        Label1->Caption = "Host";
        Button1->Caption = "Conectar";
        Button1->Tag = 0;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1Listen(TObject *Sender,
      TCustomWinSocket *Socket)
{
    Label1->Caption = Socket->LocalHost;
}
//----------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  DATOS_COM *datos_recibidos;
  datos_recibidos = (DATOS_COM *)malloc(28);
  Socket->ReceiveBuf(datos_recibidos,28);
  Edit1->Text = String(datos_recibidos->razon_social);
  Edit2->Text = String(datos_recibidos->giro);
  Edit3->Text = String(datos_recibidos->rut);
  Socket->SendText("Recibido!");
----------------------------------------------------------------------


Crandel 25-11-2006 15:47:04

No veo donde estan el entero y el flotante, todo lo que veo son string.

cocke 26-11-2006 00:48:59

ya se!!
 
Estuve probando toda la tarde y era un problema con la memoria que reservaba en el malloc, era demasiado poca para mas de un string, por eso generaba numeros raros en los otros text edit.

Gracias

Saludos


La franja horaria es GMT +2. Ahora son las 19:24:24.

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