elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [C#]Problema con Sockets + Formularios
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C#]Problema con Sockets + Formularios  (Leído 5,036 veces)
Jubjub


Desconectado Desconectado

Mensajes: 708


Lay Ladie lay,...


Ver Perfil WWW
[C#]Problema con Sockets + Formularios
« en: 3 Enero 2008, 22:57 pm »

Estoy haciendo una aplicacion con Sockets (basada en el Tutorial de Sockets de Hendriҳ), pero con la diferencia de que yo lo he intentado hacer con formularios, y he tenido dos problemas.

1.-Al darle al boton de escuchar, el programa se cuelga. Le envio mensajes por el Netcat y no responde, pero al enviarle el comando EXIT, que cierra la conexion interrumpiendo el bucle do, el programa se "descuelga" y puedo ver todo lo que le he enviado, la pregunta es si se puede conseguir hacerlo de otra forma para que no se cuelgue.   :( (Con consola va perfeco)

2.-El texto que aparece en el textbox "llegada" aparece demasiado seguido, le he añadido un TAB porque no se cual es la forma de indicar un salto de linea.
  :-(

Aquí esta el código:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Net;
  9. using System.Net.Sockets;
  10.  
  11. namespace Hola_Netcat_
  12. {
  13.  
  14.    public partial class Form1 : Form
  15.    {
  16.        public Form1()
  17.        {
  18.            InitializeComponent();
  19.        }
  20.  
  21.        private void Form1_Load(object sender, EventArgs e)
  22.        {
  23.  
  24.  
  25.        }
  26.  
  27.        private void button1_Click(object sender, EventArgs e)
  28.        {
  29.  
  30.                       IPAddress direc = Dns.GetHostEntry("localhost").AddressList[0];
  31.            IPEndPoint Ep = new IPEndPoint(direc, 1235);
  32.            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  33.            socket.Bind(Ep);
  34.            socket.Listen(100);
  35.            Socket handler = socket.Accept();
  36.  
  37.            byte[] bytes = new byte[1024]; //Declaramos un array de bytes de longitud 1024
  38.            int count;
  39.            String data = ""; //Declaramos data, que sera donde se guarde lo que recibamos
  40.            string limp = ""; //Declaramos limp, donde se almacenara data sin salto de linea
  41.            int longi ; //Declaramos longi, donde se almacenara la longitud de data
  42.  
  43.            do //Bucle Do/While
  44.            {
  45.                count = handler.Receive(bytes); //Recibimos los datos enviados y lo guardamos en cout.
  46.                data = System.Text.Encoding.ASCII.GetString(bytes, 0, count); //Lo codificamos a cadena (ya que se envian como bytes)
  47.                if (data != "salir\n") //Mientras lo recibido no sea exit + intro
  48.                {
  49.                    longi = data.Length - 1;
  50.                    limp = data.Remove(longi, 1);
  51.  
  52.                    llegada.Text = llegada.Text + "Informacion recibida:" + limp + "  "; //Mostramos lo recibido con el textbox "llegada"
  53.                }
  54.  
  55.  
  56.            } while (data != "exit\n");  //Mientras lo recibido no sea exit + Intro se continua el bucle, si recibimos exit + intro, salimos del bucle
  57.  
  58.            llegada.Text =  llegada.Text + "Se ha finalizado la conexión"; //Avisamos qde que se a terminado la transferencia de datos
  59.  
  60.            byte[] msg = System.Text.Encoding.ASCII.GetBytes("\n\nFinalizada conexion con la aplicacion"); //Codificamos de string a byte
  61.  
  62.            handler.Send(msg); //Enviamos el mensage al cliente
  63.            handler.Shutdown(SocketShutdown.Both); //"Apagamos" los sockets
  64.            handler.Close(); //Los cerramos
  65.  
  66.        }
  67.  
  68.        private void timer1_Tick(object sender, EventArgs e)
  69.        {
  70.  
  71.        }
  72. }
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.        }
  80.  
  81.  


Muchas gracias al que me ayude.  ;)


« Última modificación: 4 Enero 2008, 10:10 am por jubjub » En línea

Jugando con Fósforoshacking con un tono diferente


.
porno
MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: [C#]Problema con Sockets + Formularios
« Respuesta #1 en: 4 Enero 2008, 14:30 pm »

hola, antes de todo, quiero aclarar que no he visto todo el code y poco he trabajado con  sockets en .net pero creo que deberias de programarte un delegado para cuando el socket reciva los datos algo asi como recive o algo fijate en la documentacion o en las propiedades del socket a ver que eventos te encuentras.... en todo caso intenta reemplazar el do while por otra cosa, muy aconsejable un evento...

Atentamente,

Juan Manuel Lombana
Medellìn - Colombia


En línea


angelveredis

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [C#]Problema con Sockets + Formularios
« Respuesta #2 en: 8 Noviembre 2009, 00:33 am »

Tal vez ya sea un poco tarde pero este problema le puede surgir a mas de una persona.
Bueno lo que tendrias que usar aqui seria un hilo y para esto debes usar el espacio de nombres System.Threading los hilos permiten ejecutar tareas paralelas para seguir normalmente el funcionamiento del programa sin esperar la terminacion de otra bueno estos son los pasas para hacerlo.

1.-Agregar el espacio de nombres asi Using System.Threading.
2.-Crear un metodo void donde se hace la conexion y donde se pretende escuchar al cliente.
Private void conexionconhilo()
  {
         IPAddress direc = Dns.GetHostEntry("localhost").AddressList[0];     
         IPEndPoint Ep = new IPEndPoint(direc, 1235);     
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(Ep);       
socket.Listen(100);   
Socket handler = socket.Accept();
//abajo siguen las demas lineas...
  }


3.-Ahora declaramos un artibuto de la clase Threading.

 Private Threading hiloaux;

4.-Por ultimo en el boton donde quieran hacer la conexion on el load del programa procederemos a utilzar el hilo hilo axiliar.

ThreadStart hiloxd = new ThreadStart(conexionconhilo);
            hiloaux = new Thread(hiloxd);
            hiloaux.Start();


Bueno creo que eso es todo  si desearan obtener el nombre del servidor de forma que no sepan cual es el nombre cree este metodo espero y les sirva en algo.

1.-Agregamos el espacio de nombres using Microsoft.Win32.

2.-Creamos un metodo el cual nos devolvera el nombre del servidor o del equipo.

Private string nombredelequipo()
  {
    string x =""
 RegistryKey reg = Registry.LocalMachine.OpenSubKey (@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", true);
reg1.OpenSubKey("RegisteredOwner",true);
x= reg.GetValue("RegisteredOwner").ToString();//Obtenemos el nombre del equpo y se lo asignamos a x.
return x;
}


3.- Ahora agregamos el metodo:
IPAddress direc = Dns.GetHostEntry(nombredelequipo()).AddressList[0];

Bueno eso fue mi pequeño aporte espero que a alguin le sea util. :D


En línea

Jubjub


Desconectado Desconectado

Mensajes: 708


Lay Ladie lay,...


Ver Perfil WWW
Re: [C#]Problema con Sockets + Formularios
« Respuesta #3 en: 8 Noviembre 2009, 04:38 am »

Cuantisimo tiempo hace de aquello! :D

No sabia ni que era el \n :P

Si lo hubiera tenido que hacer hoy en dia, probaria primero con un DoEvents por ahi, aunque thread seria bastante mas adecuado :P
En línea

Jugando con Fósforoshacking con un tono diferente


.
porno
vanad

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [C#]Problema con Sockets + Formularios
« Respuesta #4 en: 21 Febrero 2010, 02:08 am »

Hola, yo tengo un problema similar.
En lugar de ejecutar el thread desde un boton lo hago en la funcion form_load ya que necesito que este activo desde el principio, el problema es que mientras el hilo esta en ejecución la función que lo ha lanzado no finaliza y mientras no finaliza el form_load no se puede usar el formulario.

Agradeceria mucho si alguien supiera como solucionar este problemilla. 
En línea

elmaro


Desconectado Desconectado

Mensajes: 301


Unas simples palabras...


Ver Perfil
Re: [C#]Problema con Sockets + Formularios
« Respuesta #5 en: 22 Febrero 2010, 03:26 am »

http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNET.htm
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [C#]Problema con Sockets + Formularios
« Respuesta #6 en: 26 Febrero 2010, 20:04 pm »

Te dejo este enlace con un tuto de Threading para que se los apliques a los sockets.

http://foro.elhacker.net/net/tutorial_iquestsystemthreading_iexclcomo_y_cuando_c-t277825.0.html;msg1367009#msg1367009

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con formularios
.NET (C#, VB.NET, ASP)
Jeezy 0 291 Último mensaje 29 Noviembre 2018, 06:20 am
por Jeezy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines