_ 2.2.1 Datagram sockets med unicast Vi ska nu titta på den andra huvudtypen av lågnivåkopplingar som kallas datagram sockets. De använder protokollet UDP för transporten av datapaket vilket innebär: - Att uppkopplingen implementerar en kontinuerlig "skicka-post"-typs-transport - Att de är osäkra, datapaketen kommer inte alltid fram och de sätts inte ihop i rätt ordning - Att de (därmed blir) snabbare Vi ska titta på peer-to-peer paradigmen (men det är inget måste för denna typ av sockets). __ Uppgift Gör ett program med ett grafiskt användargränssnitt som implementerar ett enkelt distribuerat ritprogram (whiteboard). Allt som ritas ska sändas med UDP till ett annat identiskt program som ritar upp exakt samma bild. Det andra programmet ska alltså fungera på samma sätt. __ Exempel Ett enkelt exempel kan köras enligt följande: = Hämta filen: §[Draw.jar, 05_ass/ip1/2/2.2.1/Draw.jar]§ = Kör igång programmet med: §java -jar Draw.jar § Om man vill testa på samma maskin kan man exempelvis köra igång två program: - §java -jar Draw.jar 2000 localhost 2001§ - §java -jar Draw.jar 2001 localhost 2000§ Men det är roligare om man testar två program på två olika datorer. __ Tips Utgå gärna från detta [enkla ritprogram, 05_ass/ip1/2/2.2.1/draw/Draw.java] (men det är inget krav). Bygg gärna ut programmet så att det fungerar med olika färger, olika tjocklek på penseln, olika figurer och så vidare (men det är inget krav). När man ska sända bildpunkter så kan man först omvandla dem till en sträng på något smart format (exempelvis så kan man ha ett mellanslag mellan §x§ och §y§) och sedan omvandla till en byte-array. När man går från en §Point§ till en §String§ kan man exempelvis göra så här: § String message = Integer.toString(p.x) + " " + Integer.toString(p.y); § När man ska ta emot bildpunkter så kommer de i en byte-array som man gör om till en sträng. När man går från en §String§ till en §Point§ så kan man exempelvis göra så här: § String[] xy = message.split(" "); Point p = new Point(Integer.parseInt(xy[0]), Integer.parseInt(xy[1])); § Vill man även sända med färg och tjocklek så får man utöka formatet att även ha med dessa värden. Om man testar mellan två datorer och det inte fungerar så kan det bero på att port-forwarding ska ställas in i routern eller att ens ISP blockar UDP på vissa portar. Som överkurs kan man titta på paketet §java.nio§, exempelvis på klassen §DatagramChannel§. __ Hjälp ~ 05_ass/help/01.txt > [Klicka här för hjälp, helper.dsv@gmail.com, IP Stationär: 2.2.1 Datagram sockets med unicast: http://people.dsv.su.se/~pierre/i/i.cgi?href=05_ass/ip1/2.2.1.txt] ½===system_tutoring_message===½ < ~ 05_ass/help/02.txt