Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: lauri en 04 de Julio de 2006, 01:52:54 PM

Título: c# Como conseguir la ip propia
Publicado por: lauri en 04 de Julio de 2006, 01:52:54 PM
Pues eso haber si alguien me podia escribir el codigo fuente para conseguir la ip propia en c#
Título: c# Como conseguir la ip propia
Publicado por: vincent en 04 de Julio de 2006, 02:24:35 PM
yo utilizo esto:


/// <summary>
/// Gets the local ip address machine
/// </summary>
/// <returns>Ip address</returns>
public static string GetLocalIpAddress()
{
// Get host name
String strHostName = Dns.GetHostName();

// Find host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Enumerate IP addresses
int nIP = 0;
foreach(IPAddress ipaddress in iphostentry.AddressList)
{
return ipaddress.ToString();
}
return null;
}
Título: duda
Publicado por: lauri en 04 de Julio de 2006, 04:06:58 PM
muchas  gracias funciona perfectamente

ahora otra duda es que por un lado tengo un proyecto en c# que es el cliente y otro el servidor bien pues para ver si funciona lo que hago es ejecutar el del servidor y saco un mensaje diciendo esperando cliente pues luego ejecuto el de cliente no se si me explico bien pero vamos que lo que quiero es ejecutar una sola vez y que ya lo haga solo y no tenga que estar con uno y luego con otros

se que hay que utlizar hilos, con mutex no se haber si alguien me puede ayudar.
un saludo y gracias
Título: c# Como conseguir la ip propia
Publicado por: Vicente en 04 de Julio de 2006, 07:31:33 PM
Si el cliente y el servidor son dos aplicaciones diferentes, no tiene que ver nada con mutex, hilos o cosas raras... Vamos, no se, eso creo yo, lo mismo no te he entendido.

Simplemente te haces un .bat que llame a los dos .exe o un proyecto que ejecute los otros dos. Un saludo!

Vicente
Título: c# Como conseguir la ip propia
Publicado por: Diferencial en 04 de Julio de 2006, 09:06:51 PM
Eso mismo Vicente. Lo que depende lo que quieras hacer, los hilos te haran falta para el manejo de los clientes, para ir aceptando peticiones. Si fuera un chat deberias de crear un hilo por cada conexión a tu programa servidor.
Título: c# Como conseguir la ip propia
Publicado por: lauri en 05 de Julio de 2006, 12:12:56 PM
haber ahora tengo otra duda haber si me la podeis solucionar que os veo bastante puesto con el tema

este codigo es como el cliente se conecta al servidor, lo he cogido de internet asique en algunas cosas me pierdo un poco.
donde elijo la ip para conectarme al servidor con la 127.0.0.1 bien pues esa se conecta pero si pongo otra ip 10.34.20. la que sea pues ya se me va a catch y me dice que no se puede conectar al servidor
¿tiene que ver algo en firewall? no se haber si me podeis echar una mano
un saludo y gracias


            string ipcliente=GetLocalIpAddress();
            byte[] data = new byte[1024]; //Cramos un byte[] para recibir el mensaje
            //de bienvenida del servidor
            int sent; //una variable que nos dice cuanto hemos enviado
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
            //Creamos un IPEndPoint con el ip del servidor y puerto del servidor
            //al que deseamos conectarnos, en este caso lo uso local

            //Creamos el socket igual al del servidor
            Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

            try
            {
               server.Connect(ipep);//Intentamos conectar el socket
               Console.WriteLine("Conectado con el servidor {0} {1}", ipep.Address,ipep.Port);
               Console.ReadLine();
            }
            catch (SocketException)
            {
               //Si hay excepcion imprimimos error y salimos del programa con return
               Console.WriteLine("No se pudo conectar con el servidor {0}", ipep.Address);
               return;
            }
Título: c# Como conseguir la ip propia
Publicado por: Diferencial en 05 de Julio de 2006, 12:32:14 PM
Modificas la ip del servidor y la del cliente?
Título: c# Como conseguir la ip propia
Publicado por: lauri en 05 de Julio de 2006, 12:39:15 PM
modifico la ip del servidor al que me quiero conectar, la ip del cliente no la modifico porque en teoria soy yo y quiero que sea esa creo??
porque deberia de modificar la ip del cliente??????
Título: c# Como conseguir la ip propia
Publicado por: lauri en 05 de Julio de 2006, 12:43:35 PM
la  Ip del servidor pongo IpAdress.Any que segun me pone escucha la actividad del cliente en todas las interfaces de red??
no deberia de ser esa??????????????
Título: c# Como conseguir la ip propia
Publicado por: Vicente en 05 de Julio de 2006, 12:45:18 PM
A ver, la IP del servidor es la IP donde esté el servidor. La IP de tu propia máquina es 127.0.0.1 (loopback). Por eso el cliente se conecta a esa IP. Si pones otra IP pues lógicamente no va a funcionar porque no hay un servidor.

Un saludo,

Vicente
Título: c# Como conseguir la ip propia
Publicado por: lauri en 05 de Julio de 2006, 12:48:21 PM
pero y entonces como puedo ver que funciona??
porque luego la informacion que le manda la tengo que guardar en un fichero entonces como no se conecta pues claro no me escribe nada en el fichero
lo que estoy haciendo es en otro equipo ejecuto el programa servidor y pongo su ip como si fuese un servidor y en otro equipo el cliente que se intente conectar a esa ip
no se si eso vale??
yo creo que deberia de funcionar haciendo eso o no???
Título: c# Como conseguir la ip propia
Publicado por: Diferencial en 05 de Julio de 2006, 12:54:06 PM
Cuando te dije si habias modificado la direccion ip del cliente, me referia a la ip donde el cliente se conectaba al server.
Título: c# Como conseguir la ip propia
Publicado por: lauri en 05 de Julio de 2006, 12:55:16 PM
claro esa si que la modifico pero me dice que nanai no se voy a ver si descubro algo
venga gracias un saludo para todos
Título: c# Como conseguir la ip propia
Publicado por: lauri en 06 de Julio de 2006, 09:11:39 AM
Buenos dias a todos sigo con mi aplicacion cliente servidor y ahora lo que me pasa es que me da esta excepcion cuando ejectuto la sentencia  newsock.shutdown :

Información adicional: No se ha permitido una petición para enviar o recibir datos ya que el socket no está conectado y no se ha proporcionado ninguna dirección, al realizar el envío en un socket de datagramas por medio de una llamada sendto

esto porque puede ser??????????

un saludo y gracias
Título: c# Como conseguir la ip propia
Publicado por: lauri en 06 de Julio de 2006, 05:09:43 PM
Saludos otra vez a todos, ya directamente ni voy a preguntar

Agradeceria si alguien tiene una aplicacion cliente servidor en C# que funcione claro jejej  que me la mande por favor

un saludo laura
Título: c# Como conseguir la ip propia
Publicado por: Zaelsius en 06 de Julio de 2006, 06:09:22 PM
Aquí tienes multitud de ejemplos:

http://www.codeproject.com/cs/internet/
Título: c# Como conseguir la ip propia
Publicado por: lauri en 06 de Julio de 2006, 06:24:29 PM
Bueno en primer lugar daros las gracias a todos.

Creo que el problema ese ya lo he solucionado ahora tengo otro , aqui os pongo el codigo de mi servidor, bien pues el cliente se conecta le envia informacion y luego se va, el servidor hace lo correspondiente , se desconecta y al final lo he resaltado con (********) cuando quiere cerrar el socket newsock.Shutdown(SocketShutdown.Both);
me da una excepcion exactamente dice


" No se ha permitido una peticon para enviar o recibir datos ya que el sockets no esta conectado y no se ha proporcionado ninguna direccion, al realizar el envio de un socket de datagramas por medio de una llamada sendto "




string message="";
string msg="";
byte[] data = new byte[1024]; //creamos un byte[] para enviar la bienvenida
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,9050);
//Con el IpAdress.Any esuchamos en cualquier interfaz de red.. y el 9050
//es el puerto en el que escuharemos

//creamos un socket de tipo internwtwork, stream y tcp
Socket newsock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
newsock.Bind (ipep); //lo bindeamos para que se ancle al puerto especificaco
}
catch (SocketException)
{
//si aqui hay error es que ese puerto esta en uso y entonces es probable
//que otra instancia de este programa ya este corriendo
Console.WriteLine("Al parecer otra instancia del servidor ya esta corriendo");
return; //si es asi damos un return para salirnos de la funcion y terminar
//el programa
}

newsock.Listen(1); //escuchamos con el socket en el puerto especifaco
Console.WriteLine("Waiting for a client...");
Socket client = newsock.Accept(); //Esto acepta la conexion cuando recibe
//una peticion... esto se queda esperando hasta que ocurra
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint; //creamos un IPEndPoint
//con la informacion del cliente
Console.WriteLine("Connected with {0} on port {1}", newclient.Address, newclient.Port);
Console.ReadLine();
//imprimimos en la pantalla que se conecto un cliente
string welcome = "Cliente conectado";
data = Encoding.ASCII.GetBytes(welcome); //Codificamos a byte [] el mensaje
//de bienvenida
int sent = SendData(client, data); //lo enviamos con nuestra funcion, pasandole
//el socket del cliente y el byte[] con el mensaje
for (int m = 0; m < 2; m++)
{//Este for nos sirve para leer infinitamente los mensajes que nos llegan
try
{
data = ReceiveData(client); //Llama a recibir mensajes del socket cliente
//esto se queda esperando hasta recibir un mensaje
message = Encoding.ASCII.GetString(data); //si recibimos un
//mensaje entonces lo decoficamos a un string
if (message!="") msg=message;
if (message == "") //si recibimos exit nos salimos..
break;
Console.WriteLine(message); //si no entonces lo imprimimos
Console .ReadLine();
m=m-1; //restamos al for para que sea infinito...
}
catch (SocketException)
{
Console.WriteLine("No se encontro conexion con el cliente {0}", newclient.Address);
return;
//si enocntramos un error es que se perido la conexion y con el return nos
//salimos de la funcion
}
}
//Damos el mensaje de que se desconecto el cliente XX con puerto XX
Console.WriteLine("Disconnected from {0} on port {1}",newclient.Address,newclient.Port);
//cerramos el socket del cliente
client.Shutdown(SocketShutdown.Both);
client.Close();
//Ceramos el socket con el que escuchamos
try
{
***************************************************************************
newsock.Shutdown(SocketShutdown.Both);
newsock.Close();
}
catch(Exception ex)
{
ex=ex;
}