Lunds Tekniska Högskola Piff och Puffs Chatsystem EDA095, Nätverksprogrammering - Projektrapport Gruppnummer: 1 Gruppmedlemmar: Alves-Martins, Rebecka adi10ral@student.lu.se Bredberg, Frida adifbr@student.lu.se Mattsson, Sofia dt07sm5@student.lth.se Stengren, Christoffer ada09cst@student.lu.se Handledare: Rasmus Barringer 2013-05-22
1 Bakgrund I denna rapport beskrivs ett projektarbete inom kursen Nätverksprogrammering, EDA095. Syftet med projektet är att får en djupare förståelse för och att praktiskt utöva de olika tekniker och metoder som nämnts under kursens gång. Som projektuppgift valde vi att implementera ett chatsystem där flera användare kan kommunicera med varandra och som bygger på att klienter kopplar upp sig mot en server via TCP. Vi har dessutom valt att lägga till peer-to-peer-chat samt möjligheten att skicka filer via chatsystemet. 2 Kravspecifikation Kraven vi ställde på att vårt chatsystem skulle uppfylla var peer-to-peer-kommunikation, dvs. att två personer chattar privat med varandra. Vi ville också att systemet skulle innehålla flera olika chatrum/diskussionsrum och det skulle finnas möjlighet att dynamiskt kunna skapa nya sådana. Den sista önskvärda funktionaliteten var att systemet skulle tillåta filöverföring. Våra krav för användargränssnittet var att man lätt skulle kunna skapa ett nytt chatrum och att man lätt skulle kunna inleda en ny chat med någon annan aktiv användare. Vi ville också att alla aktiva användares användarnamn skulle synas i ett fält i användargränssnittet. Varje ny chat ville vi skulle öppnas i en ny pop up-ruta för att användaren tydligt ska kunna orientera sig och se vilka olika konversationer man har uppe. Ett annat viktigt krav för vårt användargränssnitt var att användaren hela tiden ska kunna komma ångra sig och gå ett steg tillbaka eller avsluta. Vi valde därför att ha krav på att ha en Exit-knapp i alla fönster. 3 Modell Det protokoll vi valt att kommunicera via är TCP, eftersom det lämpar sig bättre vid realtidskommunikation i vårt fall eftersom det garanterar att meddelanden kommer fram, till skillnad från UDP. För varje chatrum som skapas en ny tråd på serversidan som bevakar om det kommer ett nytt meddelande. Detta för att sedan kunna skicka ut det till alla som är med i rummet. Servern har också en tråd för att kunna ta emot meddelande och göra det klienten frågar efter, samt skicka tillbaka svar på en förfrågan. För filöverförning skapas två nya trådar. En tråd som tar emot en fil för mottagarklienten och en tråd som skickar en fil för sändaren. Detta för att det parallellt ska gå att skicka meddelande när också en fil skickas. Tråden som tar emot använder sig av en serversocket och fungerar som en server medan den som skickar fungerar som en klient. Eftersom GUI:t fungerar som en tråd, dvs. när du klickar på en knapp händer något, behövs ingen tråd för att skicka meddelanden till servern. 2
3.1 Paket och klasser Nedan listas samtliga klasser och trådar. Client-package ChatClient.java Klass som tar emot meddelanden från server och avgör vad som ska hända. ChatClientSendThread.java Klass som skickar meddelanden till servern. FileReciever.java En tråd för att ta emot en fil. FileSender.java En tråd för att skicka en fil. Mailbox-package Mailbox.java Här lagras meddelandena som ska skickas ut till alla användare i samma chatrum. MailboxFTP.java Här lagras filerna som ska överföras. Server-package Chatrooms.java Beskriver chatrummens egenskaper och har hand om metoderna som påverkar dessa. ClientRepresentative.java Lyssnar på sin respektive klient och ser till att det klienten vill göra utförs. MailboxChecker.java Hanterar mailboxen och ser till att skicka vidare meddelanden. Server.java Öppnar en serversocket och accepterar klienter. GUI-package GUIchatroom.java Ett fönster som skapas för varje chatrum. GUIcreatechatroom.java Fönstret där man skapar nytt publikt chatrum. GUIlogin.java Loginrutan. GUIprivate.java Fönster för private chat, dvs. Peer-to-peer. GUIstartpage.java Startsidan där alla användare och rum som finns syns. 3
3.2 UML diagram UML diagram producerat med Green UML i Eclipse. 4
4 Användarhandledning Starta först en server genom att anropa jar-filen i en terminal. I Linux görs detta exempelvis med kommandot: java -jar Server.jar Starta sedan klienten på samma sätt fast med tillägget att ip-adressen till servern måste vara med, exempelvis: java -jar Client.jar 127.0.0.1 När man sedan startar chatsystemet ombeds man logga in med ett användarnamn. Det kommer sedan synas i listan över inloggade användare och blir alltså skärmnamnet. Därefter kommer man till startsidan, vilken består av två fönster som visar vilka chatrum som är aktiva, respektive vilka användare som är online. Under dessa finns knappar för vardera funktion som är möjlig i detta läge, dvs ansluta till ett redan befintligt chatrum, skapa ett nytt samt starta en privat (peer-to-peer) konversation med någon av de inloggade användarna. För vardera chatrum man startar öppnas ett nytt fönster. I en privat konversation är det möjligt att skicka en fil mellan de två användarna. Sändaren trycker på Send a file i ett private chatrum och väljer vilken fil den ska skicka. Mottagaren får en förfrågan om att acceptera eller neka filöverföringen. Om mottagaren väljer att acceptera måste denne spara filen. Viktigt att tänka på här är att den sparade filen måste ha samma filformat som den skickade. Det är i nuläget inte möjligt för mottagaren att välja var filen ska sparas utan det är redan förvalt att filen sparas i samma mapp som innehåller Client.jar-filen. Mottagaren får därefter en bekräftelse på att filöverföringen är genomförd. 5 Utvärdering Vi anser att vi lyckats uppfylla alla de krav vi ställde upp i början av projektet. Det krav vi hade svårast att uppfylla var filöverföringen. Användargränssnittets krav uppfylldes också. Dock ändrades designen något från vår grundskiss, men alla funktionskrav uppfylls. Det finns dock en del saker som kunde göras bättre och även en del småbuggar. Exempelvis får man ingen feedback när en fil skickas, utan detta görs i bakgrunden. För att lösa detta skulle man exempelvis kunna lägga till ett fönster som visar hur mycket av filen som är kvar att ladda ner. Ett annat exempel på en bugg i vårt system är om servern går ner, eller om man helt enkelt bara förlorar anslutningen till servern, stängs programmet ner direkt utan någon varning. Även här hade vi kunnat vara mer användarvänliga och gett feedback till användaren genom ett felmeddelande. Tyvärr upptäckte vi alldeles för sent att det inte går att skicka meddelanden med : i sig. Denna bugg beror på hur parsningen fungerar. Eftersom meddelanden använder sig av : för att dela på information, exempelvis meddelande:chattrumsnamn för att skicka meddelandet till ett chatrum, ställer detta till problem. Detta borde dock inte vara allt för svårt eller tidskrävande att lösa då det, som sagt, bara är parsningen som måste ändras. Liknande fel sker då man använder sig av kommatecken i konversationen, då syns, tyvärr, bara texten till vänster om kommatecknet medan texten till höger försvinner. 5
Projektet har varit mycket intressant och lärorikt. Möjligheten att få välja projekt själva fann vi vara mycket positivt eftersom man då kunde anpassa projektvalet efter sin egen grupps intresse, förmåga och ambitionsnivå. 6 Programlistor Projektets hemsida har följande url: http://piffopuffschat.hemsida24.se På hemsidan finns bland annat källkoden för projektet och denna projektrapport. 6