Pues eso haber si alguien me podia escribir el codigo fuente para conseguir la ip propia en c#
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;
}
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
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
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.
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;
}
Modificas la ip del servidor y la del cliente?
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??????
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??????????????
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
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???
Cuando te dije si habias modificado la direccion ip del cliente, me referia a la ip donde el cliente se conectaba al server.
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
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
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
Aquí tienes multitud de ejemplos:
http://www.codeproject.com/cs/internet/
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;
}