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//Codigo para enviar mensajes
private: System::Void Enviar_Click(System::Object^ sender, System::EventArgs^ e) {
// Conversion de string^ a cadena
String^ str = gcnew String(TextBox1->Text); //
IntPtr p = Marshal::StringToHGlobalAnsi(str);
char* buffer = static_cast<char*>(p.ToPointer());
Marshal::FreeHGlobal(p);
// Enviamos el mensaje
int b;
b
=send
(socketc
,buffer
,strlen(buffer
),0);
Código C++:
Ver original// Codigo para recibir mensajes y mostrarlos
while (len!=0) //mientras estemos conectados con el otro pc
{
len=recv(sockserver,Buffer,1023,0); //recibimos los datos que envie
if (len>0) //si seguimos conectados
{
Buffer[len]=0; //le ponemos el final de cadena
String^ msg = gcnew String(reinterpret_cast<const char*>(Buffer));//convertimos la cadena
TextBox2->Text=msg;
}}