Socket-programmering Klient/server ansatsen / protokollgrafen Java-programering o o o Fler än en klient Riktiga servrar Programmering för distribution Varför datornät? o För att distribuera beräkningar (i vid mening) distribuerade system o För att dela på (exklusiva) resurser, tillhandahålla tjänster file server, mail server, databaser, videoserver, o För att kommunicera mail, ftp, chat, cscw,... Programming 1 1 Programming 1 2 Network s: some jargon Applications and -layer protocols A process is a program that is running within a host. Within the same host, two processes communicate with interprocess communication defined by the OS. o Signals, pipes, FIFO, shared memory, (sockets), etc Processes running in different hosts communicate with an -layer protocol o HTTP, FTP, etc A user agent is an interface between the user and the. o Web:browser o E-mail: mail reader o streaming audio/video: media player Application: communicating, distributed processes o running in hosts in user space o exchange messages to implement app o e.g., email, file transfer, the Web Application-layer protocols o one piece of an app o define messages exchanged by apps and actions taken o user services provided by lower layer protocols Programming 1 3 Programming 1 4 Client-server paradigm Typical app has two pieces: client and server Client: initiates contact with server ( speaks first ) typically requests service from server, for Web, client is implemented in browser; for e-mail, in mail reader Server: provides requested service to client e.g., Web server sends requested Web page, mail server delivers e-mail request reply Klient/server ansatsen En server tillhandahåller en tjänst, en resurs o Väntar på att någon behöver tjänsten En klient utnyttjar en tjänst o Kontaktar en server och ber om en tjänst Servern är autonom och kan vägra att acceptera en klients begäran Programming 1 5 Programming 1 6 1
Klient/server ansatsen (forts) Dialogen mellan klient och server måste följa ett väl specificerat protokoll En server kan o arbeta mot en förutbestämd kundkrets - är en del av en distribuerad applikation, eller o ha en allmän uppgift - är en del av ett distribuerat system Applikationer Vilket underliggande protokoll som används styrs av typen av applikation RPC FINGER FTP Web radio SMTP RLOGIN Programming 1 7 Programming 1 8 / - protokollstacken - User Datagram Protocol Applikation Kopplingsnivån o Ethernet, token ring,... Fysiska nivån o Kablarna... Applikation Kopplingsnivån Best-effort - protokoll + portar + checksumma Adressering o -nummer + portnummer Multiplexing/demultiplexing Fysiska nivån Programming 1 9 Programming 1 10 -Transmission Control Protocol Ett tillförlitligt protokoll Garanterar att om paket kommer fram är de korrekta, ej duplicerade och i korrekt ordning Adressering o -nummer + portnummer Multiplexing/demultiplexing - Internet Protocol Ett protokoll (på nätverksnivån) Tillhandahåller en datagram service o Adressering - -nummer i varje paket Best-effort protokoll o Försöker leverera varje paket o Paket kan tappas bort, kastas om, dupliceras Programming 1 11 Programming 1 12 2
Sockets Portar En abstraktion genom vilken applikationer kan skicka och ta emot data Ett API (Application Programming Interface) mellan applikationen och lagret Identifieras unikt o -adress, port, protokoll Applikation Socket Kopplingsnivån Adresser per protokoll (port, host) /13 /13 /1345 /3242 Fysiska nivån Programming 1 13 Programming 1 14 Multiplexing/demultiplexing Standard -portar Port 1 Port 2 Demultiplexing baserad på portnummer datagram Port 3 emil ~>ypcat services more kip 2112/tcp # over kerberos acmaint_transd 901/udp kerberos_master 751/udp # Kerberos authentication kerberos-iv 750/udp kerberos kdc # Kerberos authentication--udp new-rwho 550/udp new-who # experimental kshell 544/tcp krcmd # and remote shell talk 517/udp netbios-ns 137/udp nntp 119/tcp usenet # Network News Transfer pop 110/tcp pop3 pop-3 # Post Office V.3 - RFC 1081 hostnames 101/tcp hostname # usually to sri-nic link 87/tcp ttylink http 80/tcp httpd telnet 23/tcp ftp 21/tcp echo 7/udp echo 4/ddp # AppleTalk Echo Protocol Programming 1 15 Programming 1 16 Aktiva portar Java-programmering garnet ~>/usr/etc/netstat -a Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) udp 0 0 *.ntalk *.* udp 0 0 garnet.cs.umu.se.1047 jewel.cs.umu.se.time udp 0 0 *.817 *.* tcp 0 0 localhost.12082 localhost.sunrpc TIME_WAIT tcp 0 0 localhost.12080 localhost.sunrpc TIME_WAIT tcp 0 0 localhost.12078 localhost.sunrpc TIME_WAIT tcp 0 0 localhost.12076 localhost.sunrpc TIME_WAIT tcp 0 0 localhost.12074 localhost.sunrpc TIME_WAIT tcp 0 0 garnet.cs.umu.se.22 emil.cs.umu.se.1023 ESTABLISHED tcp 0 0 garnet.cs.umu.se.22 lassie.axis.se.909 ESTABLISHED tcp 0 0 garnet.cs.umu.se.22 lassie.axis.se.1001 ESTABLISHED tcp 0 0 localhost.1039 localhost.12055 ESTABLISHED tcp 0 0 localhost.12055 localhost.1039 ESTABLISHED tcp 0 0 *.X11 *.* LISTEN tcp 0 0 *.11004 *.* LISTEN tcp 0 0 garnet.cs.umu.se.ftp decanato.exactas.ftp CLOSE_WAIT Trådar http://java.sun.com/docs/books/tutorial/ing/ Programming 1 17 Programming 1 18 3
Connectionless () Datagram Server Skapa socket serversocket = DatagramSocket() Klient Skapa socket = DatagramSocket() Läs från serversocket Skapa adress och skicka datagram på Skriv svar till serversocket Läs svar på Stäng Programming 1 19 Programming 1 20 Client.java Client.java (forts) class Client public static void main (String argv[]) throws Exception // Skapa ström för att läsa från tangentbordet BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); // Skapa socket DatagramSocket = new DatagramSocket(); // Skapa -adress InetAddress Address = InetAddress.getByName( hostname"); // Skapa datagram med sänddata och sänd det DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, Address, 3456);.send(sendPacket); // Skapa datagram för att motta data och ta // emot data DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length);.receive(receivepacket); // Ta ut det erhålla datat ur paketet och // skriv ut det String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER: " + modifiedsentence); // Läs in från tangentbordet byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); // Stäng socketen.close(); Programming 1 21 Programming 1 22 Server.java Server.java (forts) // Ta reda på -adress och port för klienten InetAddress Address = receivepacket.getaddress(); int port = receivepacket.getport(); class Server public static void main(string argv[]) throws Exception // Skapa socket DatagramSocket serversocket = new DatagramSocket(3456); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; while(true) // Behandla data, skapa paket och skicka det String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, Address, port); serversocket.send(sendpacket); // Skapa paket och ta emot data DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); String sentence = new String(receivePacket.getData()); Programming 1 23 Programming 1 24 4
Connection Oriented () Server Klient SERVER Create socket Bind port number Listen Accept CLIENT Create socket Connect Skapa socket welcomesocket = ServerSocket() Vänta på uppkoppling connectionsocket = welcomesocket.accept() Läs från connectionsocket uppkoppling Skapa socket och koppla upp mot servern = Socket() Skicka på Read Write Write Read Skriv svar till connectionsocket Läs svar på EOF Close connection Stäng connectionsocket Stäng Programming 1 25 Programming 1 26 Client.java Client.java (forts) // Skapa ström för att läsa från servern BufferedReader infromserver = new BufferedReader( new InputStreamReader(.getInputStream())); class Client public static void main (String argv[]) throws Exception String sentence; String modifiedsentence; // Skapa ström för att läsa från tangentbordet BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); // Skapa socket Socket = new Socket( hostname", 3456); // Läs in rad från tangentbordet och skriv till servern sentence = infromuser.readline(); outtoserver.writebytes(sentence + '\n'); // Läs in från servern och skriv ut på skärmen modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); // Stäng socketen.close(); // Skapa ström för att skriva till servern DataOutputStream outtoserver = new DataOutputStream(.getOutputStream()); Programming 1 27 Programming 1 28 Server.java Server.java (forts) // Skapa ström för att skriva till klienten DataOutputStream outtoclient = new DataOutputStream( connectionsocket.getoutputstream()); class Server public static void main(string argv[]) throws Exception String clientsentence; String capitalizedsentence; // Skapa serversocket ServerSocket welcomesocket = new ServerSocket(3456); // Läs in från klienten, omvandla och skicka tillbaka clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.writebytes(capitalizedsentence); while(true) // Acceptera uppkoppling Socket connectionsocket = welcomesocket.accept(); // Skapa ström för att läsa från klienten BufferedReader infromclient = new BufferedReader( new InputStreamReader(connectionSocket.getInputStream())); Programming 1 29 Programming 1 30 5
Hur lokaliserar man en server? En server måste kunna återfinnas o ip-nummer + portnummer o Fast plats för specifika servrar portnr 1-1023 reserverade för root-processer vissa portnr är reserverade för vissa tjänster Katalogtjänst o Network Information Service (NIS) o Yellow pages Standard -portar emil ~>ypcat services more kip 2112/tcp # over kerberos acmaint_transd 901/udp kerberos_master 751/udp # Kerberos authentication kerberos-iv 750/udp kerberos kdc # Kerberos authentication--udp new-rwho 550/udp new-who # experimental kshell 544/tcp krcmd # and remote shell talk 517/udp netbios-ns 137/udp nntp 119/tcp usenet # Network News Transfer pop 110/tcp pop3 pop-3 # Post Office V.3 - RFC 1081 hostnames 101/tcp hostname # usually to sri-nic link 87/tcp ttylink http 80/tcp httpd telnet 23/tcp ftp 21/tcp echo 7/udp echo 4/ddp # AppleTalk Echo Protocol Programming 1 31 Programming 1 32 Trådar i Java (nästa föreläsning) public class Threadexampel public static void main(string[] args) throws java.io.ioexception System.out.println("Starting 5 threads..."); for (int i = 0 ; i < 5 ; i++) new ExampelThread(i).start(); System.out.println("5 threads started"); public class ExampelThread extends Thread private int i; public ExampelThread(int i) super("exampelthread"); this.i = i; public void run() System.out.println("Hallo from thread " + i); Programming 1 33 6