Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/08/2011, 01:26
Apeiron
 
Fecha de Ingreso: agosto-2011
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Problema con mini chat C++

Buenas estoy haciendo un pequeño chat para practicar la api de windows y sockets en c++ y me ha surgido un problemilla os comento haber que opinais. Resulta que he hecho una ventanita con 3 botones y 2 textbox, os pongo una pequeña descripcion de cada elemento.

-Boton Servidor ( Inicia el servidor,cuando acepta una conexion, sale un mensaje en TexTBox2 conforme esta conectado y recibe mensajes para despues mostrarlos en TexTBox2 )
-Boton Cliente ( Inicia el cliente y sale un mensaje en TextBox2 conforme esta conectado)
-Boton Enviar ( Envia el texto que hay en TextBox1 del cliente)

El problema es que conecta pero no envia el mensaje, almenos no sale por pantalla en el servidor.Entonces descarto que sea un problema de no conexion. Para poder utilizar la funcion send el mensaje tiene que ser una cadena de caracteres pero el texto de TextBox1 es un System::string^ , por tanto realizo la conversion a unsigned char y utilizo la funcion...y al recibir lo vuelvo a convertir en System::string^ y le digo que lo muestre en TextBox2. Os adjunto el codigo de enviar y recibir a ver si me podeis hechar un cable Graciaaaaaas!


Código C++:
Ver original
  1. //Codigo para enviar mensajes
  2. private: System::Void Enviar_Click(System::Object^  sender, System::EventArgs^  e) {
  3.  
  4.     // Conversion de string^ a cadena
  5.     String^ str = gcnew String(TextBox1->Text); //
  6.     IntPtr p = Marshal::StringToHGlobalAnsi(str);
  7.     char* buffer = static_cast<char*>(p.ToPointer());
  8.     Marshal::FreeHGlobal(p);
  9.                
  10.         // Enviamos el mensaje
  11.         int b;
  12.         b=send(socketc,buffer,strlen(buffer),0);



Código C++:
Ver original
  1. // Codigo para recibir mensajes y mostrarlos
  2. while (len!=0) //mientras estemos conectados con el otro pc
  3. {
  4. len=recv(sockserver,Buffer,1023,0); //recibimos los datos que envie
  5. if (len>0) //si seguimos conectados
  6. {
  7.     Buffer[len]=0; //le ponemos el final de cadena
  8.     String^ msg = gcnew String(reinterpret_cast<const char*>(Buffer));//convertimos la cadena
  9.     TextBox2->Text=msg;                    
  10. }}