Академический Документы
Профессиональный Документы
Культура Документы
IPAdddress
IPEndPoint
IP Address:
Un objeto Direccin IP se utiliza para representar una nica direccin IP.
Este valor puede ser utilizado en cualquiera de los diferentes mtodos en
los que se necesita representar una direccin IP.
La Clase IPAddress
IPHostEntry he = Dns.GetHostByName(Dns.GetHostName());
IPAddress myself = he.AddressList[0];
La Clase IPEndPoint
Es similar a la estructura sockaddr_in de UNIX. En .NET se utiliza la clase
IPEndPoint para representar la combinacin IP/Puerto.
Un IPEndPoint es utilizado para asociar a un sockets una IP y un puerto
local o para indicar la IP y el puerto al que se desea conectar. Se tienen dos
constructores que son:
Construccin de Sockets
El espacio de nombres System.Net.Sockets es el que provee las clases
necesarias para trabajar con sockets. El constructor de la clase Sockets es el
siguiente:
Valores
AddressFamily
SocketType
Protocoltype
Protocoltype.Udp / Protocoltype.Tcp
Descripcin
Available
Blocking
Connected
LocalEndPoint
ProtocolType
RemoteEndPoint
SocketType
Bind(EndPoint address)
Listen(int backlog)
Descripcin
Receive(byte[] data)
Receive(byte[] data, int offset, int Recibe la cantidad de datos indicada por size
size, SocketFlags sf)
y la coloca en data a partir de la posicin
indicada por offset.
Send(byte[] data)
Descripcin
SocketShutdown.Both
Excepciones de Sockets en C#
Aunque no es obligatorio colocar las excepciones al trabajar con C#, esto
podra provocar que nuestros programas terminasen de manera no
controlada provocando resultados inesperados.
Todos los mtodos de la clase Sockets usan la excepcin SocketException,
por lo cual siempre ser recomendable encerrar nuestro cdigo dentro de
un sentencia try catch para manejar el error.
TcpClient
TcpListener
UdpClient
La Clase TcpClient
Presenta la funcionalidad necesaria para crear un cliente TCP, realiza lo
mismo que las funciones antes vistas pero con menos pasos. Se tienen 3
maneras de hacerlo:
Constructor por defecto:
TcpClient newclient = new TcpClient();
newclient.Connect("www.isp.net", 8000);
La Clase TcpClient
Especificando un Host remoto:
TcpClient newclient3 = new TcpClient("www.isp.net", 8000);
Ejemplo:
TcpClient newclient = new TcpClient("www.isp.net", 8000);
NetworkStream ns = newclient.GetStream();
byte[] outbytes = Encoding.ASCII.GetBytes("Testing");
ns.Write(outbytes, 0, outbytes.Length);
byte[] inbytes = new byte[1024]; ns.Read(inbytes, 0, inbytes.Length);
string instring = Encoding.ASCII.GetString(inbytes);
Console.WriteLine(instring); ns.Close();
newclient.Close();'
La Clase TcpListener
Se tienen 3 constructores:
La Clase TcpListener
Ejemplo:
TcpListener newserver = new TcpListener(9050);
newserver.Start();
TcpClient newclient = newserver.AcceptTcpClient();
NetworkStream ns = newclient.GetStream();
byte[] outbytes = Encoding.ASCII.GetBytes("Testing");
ns.Write(outbytes, 0, outbytes.Length);
byte[] inbytes = new byte[1024];
ns.Read(inbytes, 0, inbytes.Length);
string instring = Encoding.ASCII.GetString(inbytes);
Console.WriteLine(instring);
ns.Close();
newclient.Close();
newserver.Stop();
La Clase UdpClient
Los constructores UdpClient siguen el mismo formato que TcpClient ya que
permiten especificar la cantidad de informacin necesaria para crear el
socket UDP.
Constructores:
La Clase UdpClient
Ejemplo:
UdpClient newconn = new UdpClient(8000);
IPEndPoint remoteclient = new IPEndPoint(IPAddress.Any, 0);
byte[] recv = newconn.Receive(ref remoteclient);
string data = Encoding.ASCII.GetString(recv); ConsoleWriteLine("From: {0}",
remoteclient.ToString());
ConsoleWriteLine(" Data: "{0}", data);
newconn.Close();
Note que el objeto remoteclient, es inicializada a Any, ya que este valor ser
posteriormente sustituido.
La Clase UdpClient
El mtodo Send igual recibe como parmetro un IPendPoint que indica a
quien van dirigidos los datos.
Ejemplo:
UdpClient newclient = new UdpClient(8001);
IPEndPoint remotehost = new IPEndPoint(IPAddress.Parse("192.168.1.6"), 8001);
byte[] bytes = Encoding.ASCII.GetBytes("test string");
newclient.Send(bytes, bytes.Length, remotehost);
newclient.Close();