0
Reply

peer to peer chat error code

herbert tamayo

herbert tamayo

Jun 12 2007 12:50 AM
2.1k
hi, well i have a serious problem with this code, it's a bout a peer to peer chat, basically my problem is that the port number of the socket is always 0, here is the code: basically yhe problem is in the process 2, event 2 PROCESS #1, TO LISTEN EVENT 1: private void cmdconectar_Click(object sender, EventArgs e) { //misock.recibirDatos(); threadchat = new Thread(new ThreadStart(quieroEscuchar)); threadchat.Start(); cmdconectar.Enabled = false; } EVENT 2 (CALLED FROM EVENT 1): public void quieroEscuchar() { int mioreja = Convert.ToInt32(txtmioreja.Text); IPEndPoint iplocalpunto; try { IPAddress myip = Dns.Resolve("localhost").AddressList[0]; iplocalpunto = new IPEndPoint(myip, mioreja); //ojo con lo que se digita } catch (SocketException socketerror) { marquesina.Text = socketerror.Message; return; } try { orejasocket = new windowSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); orejasocket.misockete.Bind(iplocalpunto); orejasocket.misockete.Listen(100); while (true) { finalizado.Reset(); orejasocket.misockete.BeginAccept(new AsyncCallback(acepComunic), orejasocket); finalizado.WaitOne(); } } catch (Exception error) { marquesina.Text = error.Message; } } EVENT 3 (CALLED FROM EVENT 2): public void acepComunic(IAsyncResult ar) { try { finalizado.Set(); windowSocket sintonizador = (windowSocket)ar.AsyncState; int nxsoc = validarSocket(); //ojo este se llama getavailblesocket sockcliente[nxsoc].misockete = (Socket)orejasocket.misockete.EndAccept(ar); //linea modificada sockcliente[nxsoc].socketRef = numsocket; //sockcliente[nxsoc].socketRef = Convert.ToInt32(txttuoreja.Text); sockcliente[nxsoc].usuRemoto = txttuip.Text; //ojo el compi me daba ref directa a form1_method, lo borre sockcliente[nxsoc].onConnected += new ConectarDelegado(onConnected); sockcliente[nxsoc].onDisconnected += new DesconectarDelegado(onDisconnected); sockcliente[nxsoc].onReadyReceive += new RecibirDelegado(onReceive); //en la linea anterior verificar si es asi o solo onReceive sockcliente[nxsoc].onReadySend += new EnviarDelegado(onReadySend); sockcliente[nxsoc].onConnectClose += new CerrarDelegado(onCloseRemote); //en la linea anterior verificar si es asi o solo onConnectClose sockcliente[nxsoc].onSocketMessage += new mensajeDelegado(onSockMessage); //verificar si es asi o onSockMessage sockcliente[nxsoc].onSendingFile += new enviandoDelegado(onEnvRec); //verificar si es asi o OnSending sockcliente[nxsoc].onReceiveFile += new recibirArchivoDelegado(onEnvRec); //verificar si es asi o OnSending sockcliente[nxsoc].recibirDatos(); ListViewItem lstusu = new ListViewItem(); lstusu.Text = nxsoc.ToString(); lstusu.SubItems.Add(sockcliente[nxsoc].misockete.RemoteEndPoint.ToString()); lstusu.SubItems.Add(txttuip.Text); lstpizarra.Items.Add(lstusu); } catch (Exception error) { marquesina.Text = "acepComunic : " + error.Message + error.Source.ToString(); } } ENVET 4 (CALLED FROM EVENT 3): private int validarSocket() { int x = -1; MessageBox.Show("Antes de entrar al lazo for: " + x.ToString()); for(x=0;x -1) && (x < CONEXMAX)) MessageBox.Show("con este valor inicia el socket: "+x.ToString()); x = Convert.ToInt32(txttuoreja.Text); iniciarSocket(ref sockcliente[x], x); //prueba en vez de x de una vez el valor de lo digitado ancla marquesina2.Text= "socket seleccionado: "+x.ToString(); return x; } EVENT 5 (CALLED FROM EVENT 4): private void iniciarSocket(ref windowSocket misockete, int numsocket) { try { misockete = new windowSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); misockete.socketRef = numsocket; misockete.usuRemoto = txttuip.Text; //ojo los sigs el compi me daba ref directa a misockete, lo borre misockete.onConnected += new ConectarDelegado(onConnected); misockete.onDisconnected += new DesconectarDelegado(onDisconnected); misockete.onReadyReceive += new RecibirDelegado(onReceive); //en la linea anterior verificar si es asi o solo onReceive misockete.onReadySend += new EnviarDelegado(onReadySend); misockete.onConnectClose += new CerrarDelegado(onCloseRemote); //en la linea anterior verificar si es asi o solo onConnectClose misockete.onSocketError += new errorSocketDelegado(onSocketError); //el metodo anterior no fue incluido en acepComunic misockete.onSocketMessage += new mensajeDelegado(onSockMessage); //verificar si es asi o onSockMessage misockete.onSendingFile += new enviandoDelegado(onEnvRec); //verificar si es asi o OnSending misockete.onReceiveFile += new recibirArchivoDelegado(onEnvRec); //verificar si es asi o OnSending } catch (Exception error) { marquesina.Text = error.Message; } } EVENT 6 (CALLED FROM EVENT 3) //THIS EVENT IS OUTSIDE OF THE MAIN CLASS public void recibirDatos() { try { //esta linea no func estadoObjeto state = new estadoObjeto(); state.selectSocket = misockete; misockete.BeginReceive(state.buffer,0,estadoObjeto.bufferTam,SocketFlags.None, new AsyncCallback(recibirLlamada), state); } catch (Exception e) { RaiseSockErrEvent("Recibir : "+e.Message); CloseSocket(); } } PROCESS #2, TO CONNECT: EVENT 1: private void cmdplug_Click(object sender, EventArgs e) { int tuoreja = Convert.ToInt32(txttuoreja.Text); IPEndPoint iplocalpunto; try { IPAddress tuip = Dns.Resolve(txttuoreja.Text.ToString()).AddressList[0]; iplocalpunto = new IPEndPoint(tuip, tuoreja); } catch (SocketException error) { MessageBox.Show(error.Message); return; } int nxsoc = validarSocket(); try { sockcliente[nxsoc].socketRef = nxsoc; if (sockcliente[nxsoc] == null) iniciarSocket(ref sockcliente[nxsoc],nxsoc); if (!sockcliente[nxsoc].misockete.Connected) sockcliente[nxsoc].asincTCPIP(iplocalpunto); } catch (Exception error) { marquesina.Text="CMDPlug :"+error.Message; iniciarSocket(ref sockcliente[nxsoc],nxsoc); } } EVENT 2 (CALLED FROM EVENT 1): private int validarSocket() { int x = -1; MessageBox.Show("Antes de entrar al lazo for: " + x.ToString()); for(x=0;x -1) && (x < CONEXMAX)) MessageBox.Show("con este valor inicia el socket: "+x.ToString()); x = Convert.ToInt32(txttuoreja.Text); iniciarSocket(ref sockcliente[x], x); //prueba en vez de x de una vez el valor de lo digitado ancla marquesina2.Text= "socket seleccionado: "+x.ToString(); return x; } EVENT 3 (CALLED FROM EVENT 2): private void iniciarSocket(ref windowSocket misockete, int numsocket) { try { misockete = new windowSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); misockete.socketRef = numsocket; misockete.usuRemoto = txttuip.Text; //ojo los sigs el compi me daba ref directa a misockete, lo borre misockete.onConnected += new ConectarDelegado(onConnected); misockete.onDisconnected += new DesconectarDelegado(onDisconnected); misockete.onReadyReceive += new RecibirDelegado(onReceive); //en la linea anterior verificar si es asi o solo onReceive misockete.onReadySend += new EnviarDelegado(onReadySend); misockete.onConnectClose += new CerrarDelegado(onCloseRemote); //en la linea anterior verificar si es asi o solo onConnectClose misockete.onSocketError += new errorSocketDelegado(onSocketError); //el metodo anterior no fue incluido en acepComunic misockete.onSocketMessage += new mensajeDelegado(onSockMessage); //verificar si es asi o onSockMessage misockete.onSendingFile += new enviandoDelegado(onEnvRec); //verificar si es asi o OnSending misockete.onReceiveFile += new recibirArchivoDelegado(onEnvRec); //verificar si es asi o OnSending } catch (Exception error) { marquesina.Text = error.Message; } }