1 / 25

Nätverkskommunikation

Nätverkskommunikation. Nätverksprotokoll. För att datorer ska kunna kommunicera med varandra behövs någon sort av regler för hur kommunikationen ska gå till. Reglerna kallas för protokoll i sådana sammanhang.

vahe
Download Presentation

Nätverkskommunikation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nätverkskommunikation

  2. Nätverksprotokoll • För att datorer ska kunna kommunicera med varandra behövs någon sort av regler för hur kommunikationen ska gå till. Reglerna kallas för protokoll i sådana sammanhang. • Det finns ett antal protokoll men det är TCP/IP som är dominant i dagsläge för nätverkskommunikation • IP – Internet Protocol • Protokoll för Internet kommunikation • TCP – Transmission Control Protocol • Protokoll för sändning över Internet • Tillåter upprätthållande av virtuella kanaler över Internet i vilka information kan enkelt skickas.

  3. IPAddress ipAdr = new IPAddress(192121049001); IPEndPoint ipEP = new IPEndPoint(ipAdr, 80); Adressering • Med adressering menas att: • ange adressen till värddatorn med hjälp av IP adress. • ange portnummer som ska anslutas till. • Adressering åstadkoms med hjälp av dessa klasser: • IPAddress: representerar en IP adress • IPEndPoint: representerar en IP adress och ett portnummer till vilken datorn den ska kopplas till. • IPAddress och IPEndPoint finns I namnrymden System.Net

  4. IPAddress • Klassen IPAddress används till att representera just en IP adress. • IPAddress har ett antal överlagrade konstruktorer: • IPAddress iPa1 = new IPAddress(192000000001); • IPAddress iPa2 = new IPAddress(new byte[] {192,0,0,1}); • IPAddress har en egenskap(property) för att returnera IP adressen till den aktuella datorn. • IPAddress.Loopback

  5. Kommunikation via Socket, översikt • .NET Remoting och Webservices använder Socket för att upprätthålla kommunikationen via nätverket. • Vid kommunikation via nätverket en av parterna måste initiera kommunikationen. • Klient och server har olika uppgifter och är vanligtvis placerade i olika applikationer. • När en anslutning har upprätthållits mellan två Sockets och kommunikationen har påbörjat, både parterna har då samma möjlighet för kommunikation

  6. 15 Internet 80 152.153.5.204 15 Data ... Client Server 152.153.5.204 Kommunikation via Socket • Socket representerar tvåvägskommunikations kanaler, som tillåter att både skicka och ta emot strömmade data. • Klient-Server arkitektur • Klient sänder förfrågning till Servern • Server bearbetar förfrågningen och • Skickar svaret tillbaka • Adresseringen sker med hjälp av IP adress och portnummer • Informationsbyte sker via strömmar (nätverksströmmar)

  7. System.Net.Sockets • Namnrymden System.Net.Sockets tillhandahåller en säker implementation av interfacet Windows Sockets (Winsock) så at utvecklarna som behöver ha kontroll över tillträde till nätverket får det. • Följande klasser finns i System.Net.Sockets: • NetworkStream • Socket • TcpClient • TcpListener • UdpClient • ….. • Följande enumerationer finns i System.Net.Sockets: • ProtocolType • SocketShotdown • …..

  8. public enum ProtocolType {Ggp, Icmp, Idp, IP, IPv6, Tcp, UDP, ……. } Socket • Klassen Socket tillhandahåller en rik uppsättning av metoder och egenskaper för nätverkskommunikation. • Klassen Socket tillåter att genomföra både synkrona som asynkrona dataöverföring med hjälp av någon kommunikations protokoll som är listade i en enumeration som heter ProtocolType. • ProtocolType enumerationen används av Socket för att informera Windows Socket API vilka protokoll som finns och kan användas.

  9. Socket • Om ett protokoll som TCP används: • Servern kan lyssna då på anslutningen genom metoden Listen. • Metoden Bind måste anropas före metoden Listen för att specificera IP adress och portnummer den ska kopplas till. • Metoden Accept bearbetar inkommande förfrågningar och returnerar ett Socketobjekt som används till att kommunicera med klienten . • Servern använder den returnerade Socketobjektet till att anropa metoderna Send och Receive. • Om en klient vill koppla sig till en server som lyssnar, anropa då metoden Connect. • För att klienten ska kommunicera med servern, anropa då metoderna Send och Receive.

  10. Socket s0 = new Socket(); IPAddress ip = IPAddress.parse(192.1.1.0); IPEndPoint ep = new IPEndPoint(ip,5000); s0.bind(ep); s0.Listen(10); s2 … s0 Server 5000 Client … Socket • Klient • Skapa en Socket och binda den till IP adress och portnummer • Server • Skapa en Socket och binda den till IP adress och portnummer • Öppna Socket för maximal 10 klienter Socket s2 = new Socket(); IPAddress ip = IPAddress.Parse(192.1.1.0); IPEndPoint ep = new IPEndPoint(ip,5000);

  11. s0 Server 5000 s2 Client … s1 s2.Send(msg1); ... s2.Receive(msg2); s2.Shutdown(SocketShutdown.Both); s2.Close(); s1.Receive(msg1); ... s1.Send(msg2); s1.Shutdown(SocketShutdown.Both); s1.Close(); Socket • Anslut till servern • Väntar på anslutningen Socket s1 = s0.Accept(); s2.Connect(ep); • Kommunicera med klienten och avbryt anslutningen • Kommunicera med servern och avbryt anslutningen

  12. EchoClient_1 „test echo“ EchoServer „test echo“ EchoClient_N Port 5000 „hello“ „hello“ Exempel på EchoServer • Implementera en enkel klient-server applikation. • EchoServer accepterar godtyckligt data från klienten och returnerar datat oförändrat tillbaka till klienten.

  13. Exempel på EchoServer class EchoServer { socket s; public bool StartUp(IPAddress ip, int port) { try { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Bind(new IPEndPoint(ip, port)); s.Listen(10); // Maximal 10 klienter } catch (Exception e) { ... } for(;;) { // vänta på anslutningen Communicate(s.Accept()); } }

  14. Exempel på EchoServer, forsättning class EchoServer { ... // Returnerar tillbaka datat till klienten public void Communicate(Socket clSock) { try { byte[] buffer = new byte[1024]; while (clSock.Receive(buffer) > 0) // ta emot data clSock.Send(buffer); // skicka tillbaka data clSock.Shutdown(SocketShutdown.Both); // stänga socket clSock.Close(); } catch (Exception e) { ... } } public static void Main() { EchoServer = new EchoServer(); server.StartUp(IPAddress.Loopback, 5000); // Starta echo server }

  15. Exempel på EchoClient class EchoClient { ... public static void Main() { try { // Anslut till server Socket s = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Connect(new IPEndPoint(IPAddress.Loopback, 5000)); s.Send( Encoding.ASCII.GetBytes("This is a test“)); // skicka meddelande byte[] echo = new byte[1024]; s.Receive(echo); // ta emot echo meddelande Console.WriteLine(Encoding.ASCII.GetString(echo)); } catch (Exception e) { ... } }

  16. Socket kommunikation med TCP/IP • Om man utvecklar en relativ enkel applikation som kräver ingen hög prestanda, då ska man överväga att använda TcpClient och TcpListener. • Dessa klasser tillhandahåller en enklare och mer användarvänligt gränssnitt mot Socket kommunikation.

  17. TcpClient • Klassen TcpClient tillhandahåller enkla metoder för att ansluta, skicka och ta emot en ström av data över nätverket, synkront. • Om man ska använda TcpClient till att ansluta och utbyta data, så måste servern lyssna på inkommande förfrågningar med hjälp av TcpListener eller Socket. Det går att ansluta till dessa lyssnare i en av följande sätt: • Skapa en TcpClient och anropa en av dess 3 tillgängliga Connect metoderna. • Skapa en TcpClient genom att ange datornamnet och portnummer på fjärrdatorn. konstruktorn skapar då automatiskt en anslutning. • Att skicka eller ta emot data • använd metoden GetStream för att erhålla NetworkStream. • Anropa metoderna Write och Read med hjälp av NetworkStream-objektet • Använd metoden Close för att frigöra alla resurser som är kopplade till TcpClient.

  18. TcpClient public class SocketClient { public static void Main() { try { TcpClient tcpc = new TcpClient(); tcpc.Connect(IPAddress.Loopback, 5000); StreamWriter sw = new StreamWriter(tcpc.GetStream()); StreamReader sr = new StreamReader(tcpc.GetStream()); sw.Write(“Hello server“); MessageBox.Show(sr.ReadLine()); sw.Close(); sr.Close(); tcpc.Close(); } catch (Exception e) { ... } }

  19. TcpListener • Klassen TcpListener tillhandahåller enkla metoder som lyssnar och godkänner de inkommande förfrågningar. • Det går att använda TcpClient eller Socket för att ansluta till TcpListener. • TcpListener skapas med hjälp av en av dess 3 konstruktorer: • TcpListener(IPEndPoint) • TcpListener(IPAddress,portnummer) • TcpListener(portnummer)

  20. TcpListener • Använd metoden Start till att börja lyssna på inkommande förfrågningar. Start sätter de inkommande förfrågningar i ett kösystem tills man anropar metoden Stop eller tills att kön har uppnåtts dess maximala storlek. • Använd antigen AcceptSocket eller AcceptTcpClient till att plocka en anslutning från kön. • Dessa två metoder blockerar. För att undvika blockeringen använd först metoden Pending för att avgöra om en förfrågning om anslutning finns i kön.

  21. TcpListener public class SocketServer { public static void Main() { try { TcpListener tcpl = new TcpListener(IPAddress.Loopback, 5000); tcpl.Start(); if (! tcpl.Pending()) { Console.WriteLine("Sorry, no connection requests have arrived"); } else { TcpClient client = tcpl.AcceptTcpClient(); StreamWriter sw = new StreamWriter(tcpc.GetStream()); sw.Write(“Hello Client“); sw.Close(); client.Close(); tcpl.Close(); } } catch (Exception e) { ... } }

  22. Socket s = new Socket(); s.Connect(”www.isk.kth.se”, 4711); NetworkStream ns = new NetworkStream(s); NetworkStream • Klassen NetworkStream tillhandahåller metoder för att skicka och ta emot data över Socket. • Det måste finnas en ansluten Socket för att skapa en NetworkStream.

  23. Socket s = new Socket(); s.Connect(”www.isk.kth.se”, 4711); NetworkStream ns = new NetworkStream(s); byte[] myWriteBuffer = Encoding.ASCII.GetBytes(”Hello .NET"); s.Write(myWriteBuffer, 0, myWriteBuffer.Length); byte[] myReadBuffer = new byte[1024]; s.Read(myReadBuffer, 0, myReadBuffer.Length); NetworkStream • Efter att NetworkStream-objektet har initierats då går att skicka och ta emot data via dessa två metoder: • Write • Read

  24. StreamWriter & StreamReader • Om man har en ström, som NetworkStream, kan man då använda klasserna StreamWriter och StreamReader (System.IO) för att enkelt skriva och läsa text på strömmen. StreamWriter output = new StreamWriter (ns); output.WriteLine(“Hello .NET”); output.Flush(); • En StreamWriter har metoderna Write och WriteLine som fungerar precis som motsvarande statiska metoder i Console-klassen. På detta sätt kan man alltså skicka formaterade text-meddelanden med inkluderade variabelvärden. • Write- och WriteLine-metoderna skriver meddelanden på strömmen men för att även skicka iväg dem måste man • anropa output.Flush(). • stänga StreamWriter-objektet med output.Close() • stänga ned TcpClient-objektet och det måste ändå göras till slut så i de flesta fall behöver Close-metoden inte användas.

  25. StreamWriter & StreamReader StreamReader input = new StreamReader (ns); MessageBox.Show(input.ReadLine()); • StreamReader har metoderna Read och ReadLine som fungerar precis som motsvarande metoder i Console-klassen men de läser från nätverksströmmen istället för från standard in. Det finns fler läsmetoder i klassen som du kan läsa om i klassbiblioteksreferensen om du är intresserad.

More Related