Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.



Relevanta dokument
Hur kompilera in TJa-biblioteket?

Föreläsning 4: Poster

Föreläsning 6: Introduktion av listor

Åtkomst och användarhandledning

Tentaupplägg denna gång

Tentaupplägg denna gång

Projektrapport EDA095

5 Grundläggande in- och utmatning

Brädspelet Mulan. Håkan Berggren, Magnus Ellisson, Lars Kristiansson, Cheng-Huei Kuo, Eva Ljunggren, Joakim Viker. Göteborg 1999.

Installationsanvisning för kursens programvara på egen dator

Övningar Dag 2 En första klass

Exempel på ett litet Ada-program

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Tentamen Grundläggande programmering

Designspecifikation den 13 december 2007

Objektorienterad programmering D2

Föreläsning 7: Filer

Redovisning av inlämningsuppgifter

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

HexaFlip. Kravspecifikation

Introduktion till MATLAB, med utgångspunkt från Ada

Att använda pekare i. C-kod

Uppgift 1 ( Betyg 3 uppgift )

Realtid. eda040project2010 MANUAL. - Christoffer Olsson. - Daniel Lehtonen

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen OOP

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Programmeringsuppgifter 1

1 Funktioner och procedurell abstraktion

Att skriva till och läsa från terminalfönstret

Laboration 10 - NetBeans

Bruksanvisning för hjälpbegäran

Föreläsning 0: Introduktion av Ada

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Editering, Kompilering och Exekvering av Javaprogram

Datorsystem Laboration 2: Minnesmappade bussar

Laboration 2: Ett kommunikationssystem

Användarmanual Pagero Connect 2.0

Föreläsning 3.1: Datastrukturer, en översikt

Installation av. Vitec Online

Problem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Det första steget blir att titta i Svensk MeSH för att se om vi kan hitta några bra engelska termer att ha med oss på sökresan.

Felsökning av mjukvara

Grunderna i stegkodsprogrammering

Att komma igång med FirstClass (FC)!

Chapter 3: Using Classes and Objects

NXT LEGO-robot laboration Programmering och felsökning av en LEGOrobot

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

ViTex snabbguide. 1. Inläsning till ViTex från scanner eller PDF Läs in text via scanner Läs in text från en JPEG-bild eller ett PDF-dokument

Redovisa i e-möten via Adobe Connect

Programmeringsteknik med C och Matlab

Decipher och Datataker DT100

Elektroniskt informationsutbyte mellan arbetsgivare och Försäkringskassan. Information om filöverföring

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Manual för uppdatering av föreningsuppgifter

Den golfspelande roboten

EDA095 Nätverksprogrammering

Datainsamling över Internet

Säkerhet Användarhandbok

Björn Abelli Programmeringens grunder med exempel i C#

Hjälpmedel för kompilatorkonstruktion, DVB004

SMD 134 Objektorienterad programmering

Projekt i Nätverksprogrammering. MegaNet Handledare: Pierre Nugues

Användarhandbok OE/OSSpeaker V.10.3

Instruktion för suggringsnav

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Föreläsning 1 & 2 INTRODUKTION

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Transseans på Stockholm Spiritualistiska Förening. Den 8 februari, 2016

UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap. Grafproblem. Laboration 4, Datastrukturer och Algoritmer VT02

Mobila applikationer. Mobil applikationer. Java ME. Konfigurationer. Grunderna i ME

Objektorienterad programmering

Utvärdering 2015 målsman

Gesäll provet Internetprogrammering I. Författare: Henrik Fridström. Personnummer: Skola: DSV

Handbok Fyrkanter. Matt Williams Granskare: Eugene Trounev Översättare: Stefan Asserhäll

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

kl Tentaupplägg

Uppgift 1 (Oläsliga krypterade meddelanden)

ELEVHJÄLP. Diskussion s. 2 Åsikter s. 3. Källkritik s. 11. Fördelar och nackdelar s. 4. Samarbete s. 10. Slutsatser s. 9. Konsekvenser s.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Introduktion till Adobe Acrobat Connect. I denna guide beskrivs hur man använder Adobe Connect samt användning av headset och webbkamera.

Lära känna skrivbordet

Introduk+on +ll programmering i JavaScript

Post Mortem för Get The Treasure!

Kaninen som rymde Lärarmaterial

varandra. Vi börjar med att behandla en linjes ekvation med hjälp av figur 7 och dess bildtext.

Lathund för överföring av rapporter och ljudfiler

ZACI är den programvara som är navet i kommunikationen när det gäller kortbetalningar.

INSTRUKTION Specifikation E modul.doc

ANVÄNDARMANUAL. handdatorer i ängs- och betesmarksinventeringen. för

Import av utlandsresultat

Studentguide Adobe Connect Pro

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Grundläggande programmering med C# 7,5 högskolepoäng

Transkript:

Sockets: server with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.Text_IO; with TJa.Sockets; use TJa.Sockets; procedure Server is -- Servern behöver en Listener_Type för -- att ta emot inkommande anslutningar Lyssnare : Listener_Type; -- Socket_type används för att kunna -- kommunicera med en klient Socket : Socket_Type; -- Text - används för att lagra en textrad -- Textlangd - radens längd -- Antal_E - antal E i Text Text : String(1..100); Textlangd, Antal_E : Natural; begin -- Kontrollerar att programmet startas med -- en parameter (portnumret i detta fall). -- Annars kastas ett fel. -- Starta programmet enligt: -- server 3400 if Argument_Count /= 1 then Raise_Exception(Constraint_Error Identity, "Usage: " & Command_Name & " port"); end if;

-- Initierar lyssnaren på en port Initiate(Lyssnare, Natural Value(Argument(1))); -- Väntar tills en anslutning kommer, -- krävs att en klient kör connect Wait_For_Connection(Lyssnare, Socket); -- Nu har en anslutning skapats och vi kan -- börja använda den... Put_Line("Klient ansluten..."); loop --Väntar på en sträng från klienten Get_Line(Socket, Text, Textlangd); --Letar rätt på antalet E i denna text Antal_E := 0; for I in 1.. Textlangd loop if Text(I) = E then Antal_E := Antal_E + 1; end if; end loop; --Skickar resultatet tillbaka Put_Line(Socket, Antal_E); end loop; Close(Socket); -- Kommer aldrig hit, men... exception --Lite felhantering. when Constraint_Error => Put("Du matade inte in en paramter ); Put_Line( innehållande portnummer."); when others => -- Kanske End_Error eller Socket_Error, -- det betyder att klienten kopplat ned -- förbindelsen. Stängas även härifrån. Put_Line("Nu dog klienten"); Close(Socket); end server;

Sockets: klient with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.Text_IO; with TJa.Sockets; use TJa.Sockets; procedure Klient is -- Socket_Type används för att kommunicera -- med en server Socket : Socket_Type; -- Text - används för att lagra en textrad -- Textlangd - radens längd -- Resultat - resultatet från servern Text : String(1..100); Textlangd : Natural; Resultat : Natural; begin -- Kontrollerar att programmet startas med -- två parametrar (serverdator och portnummer -- i detta fall). Annars kastas ett fel. -- Starta programmet enligt: -- klient zaza12 3400 -- klient localhost 3400 if Argument_Count /= 2 then Raise_Exception(Constraint_Error Identity, "Usage: " & Command_Name & " serverhost serverport"); end if;

-- Initierar en socket, detta krävs för att -- kunna ansluta denna till servern. Initiate(Socket); -- Ansluter till servern Connect(Socket, Argument(1), Positive Value(Argument(2))); loop --Läser in en sträng från användaren Put_Line("Mata in, exit => stop ); Get_Line(Text,Textlangd); if Textlangd=100 then Skip_Line; end if; exit when Text(1..4) = "exit"; -- Skicka strängen till servern Put_Line(Socket,Text(1..Textlangd)); -- Vänta på att få tillbaka resultatet Get(Socket,Resultat); Skip_Line(Socket); -- Skriv ut på skärmen Put("Strängen innehöll"); Put(Integer Image(Resultat)); Put_Line(" st E"); end loop; -- Innan programmet avslutar stängs socketen -- (bryts kontakten), detta genererar ett -- undantag (exception) hos servern. Close(Socket); -- På motsvarande sätt skulle denna klient -- kunna få ett undantag om servern bryter -- förbindelsen end Klient;

Hur kompilera in TJa-biblioteket? På kurshemsidan (under projekt) finns det en länk till TJa-bibliotekets dokumentation (studentversionen). Där finner ni de paketspecifikationer som visar vad de olika paketen i biblioteket innehåller. När ni använder saker ur TJa-biblioteket (d.v.s. när ni skrivit något likt följande i ert program) with TJa.Xyz; skall själva kompileringen se lite annorlunda ut: gnatmake ~TDDD11/lib/TJa/bin/tja_config program.adb OBS! Man skall absolut inte kopiera några filer från TJa-biblioteket. Dessa inkluderas på rätt sätt när man utför ovanstående. Om man ändå råkat kopiera några delar från hemsidan kommer kompileringen att ge felmeddelanden av typen Missing file tja-xyz.adb Tag då bort de filer som ni kopierat så löser sig problemet.

TJa-biblioteket (studentversion) De olika delarna i TJa-biblioteket som ni studenter kan använda är följande: TJa.Calendar TJa.File_IO TJa.Keyboard TJa.Keyboard.Keys key_codes TJa.Lists TJa.Lists.Unchecked.Double_Linked. General_List.Checked_Data Sorted_List.Checked_Data Unsorted_List.Checked_Data TJa.Sockets TJa.Window.Elementary TJa.Window.Text TJa.Window.Graphic TJa.Misc

Trevliga saker om strängar Det finns en strängtyp som heter Unbounded_String. Denna anpassar sig efter vad man lagrar i den. Kan vara trevligt att använda i vissa fall. För att hantera detta i samband med de vanliga strängarna kan det vara bra att kolla in de rutiner som hör till denna datatyp. Kolla i paketet Ada.Strings.Unbounded. Några bra saker (till att börja med) är: S : String(1.. 10); US : Unbounded_String; begin... US := To_Unbounded_String(S); S := To_String(US); L := Length(US);... end...; Vill man hantera vanliga String lite mer kan man titta i paketet Ada.Strings.Fixed. Några specialla saker som hör till stränghanteringen finns också i paketet Ada.Strings.

Grafiska delen i TJa-biblioteket with Ada.Text_IO; use Ada.Text_IO; with TJa.Window.Elementary; use... with TJa.Window.Text; use... with TJa.Window.Graphic; use... procedure Test_TJa is Msg : constant String := " Hello world "; X_UL : constant Integer := 10; Y_UL : constant Integer := 2; begin Reset_Colours; -- Standard (black & white) Clear_Window; Set_Graphical_Mode(On); -- Draw a rectangle on screen... Goto_XY(X_UL, Y_UL); Put(Upper_Left_Corner); Put(Horisontal_Line, Times => Msg Length); Put(Upper_Right_Corner); Goto_XY(X_UL, Y_UL + 1); Put(Vertical_Line); Goto_XY(X_UL + Msg Length + 1, Y_UL + 1); Put(Vertical_Line); Goto_XY(X_UL, Y_UL + 2); Put(Lower_Left_Corner); Put(Horisontal_Line, Times => Msg Length); Put(Lower_Right_Corner); Set_Graphical_Mode(Off);

-- Prints the message inside the rectangle... Goto_XY(X_UL + 1, Y_UL + 1); Set_Background_Colour(Blue); Set_Foreground_Colour(White); Set_Bold_Mode(On); Put(Msg); Reset_Colours; Reset_Text_Modes; -- Resets bold mode... Goto_XY(1, Y_UL + 4); end Test_TJa; OBS! Detta är inget äkta grafiskt paket utan en utökning av den vanliga texthanteringen i ett terminalfönster med t.ex. färger, några grafiska tecken m.m. Varje grafiskt tecken motsvarar ett vanligt tecken, men det ser ut som ett vågrätt/lodrätt streck eller ett hörn. Det man kan få fram är dock figurer som innehåller räta linjer horisontellt och vertikalt. Ett exempel skulle kunna vara att man kan rita ett vanligt husfönster.

Tangenthanteringsdelen i TJa-biblioteket För att göra det lite roligare och användarvänligare i projekten är det meningen att ni skall undvika saker som att användaren matar in koordinater för att placera ut skepp, kryss m.m. Användaren skall kunna köra ert projekt enkelt. T.ex. genom att använda sig av piltangenter för att flytta sig till en ruta man vill placera ut ett kryss på ett luffarschacksbräde eller vinkla någon kanon så att man kan skjuta i en viss vinkel. För detta behövs något för att hantera tangentbordet lite smidigare. Till detta använder ni TJa.Keyboard-paketet. with Ada.Text_IO; use Ada.Text_IO; with TJa.Window.Elementary; use... with TJa.Keyboard; use... procedure Move_Cursor is X, Y : Positive := 10; Key : Key_Type; begin loop Goto_XY(X, Y); Get_Immediate(Key); exit when Is_Esc(Key) or (X = 1); if Is_Left_Arrow(Key) then X := X - 1; end if; end loop; end Move_Cursor;

Innan ni kommer allt för långt i ert projekt VIKTIGT! Hur skall ni lagra era data i projektet? Vad har ni för olika möjligheter? Enstaka variabler Poster Fält Listor Filer Kombinationer av ovanstående Hur skall ni strukturera ert program? Skall det finnas paket/underprogram/...? En tanke man bör ha är att man skall se om det finns saker som används både i server och klient. Isåfall är det praktiskt att lägga sådana saker i ett (eller flera) paket. Vad kan det vara? Nätverksdelen (socketshanteringen) Lagring/hantering av spelplan Interaktion med användaren Att dela upp projektet i olika delar gör att ni kan arbeta parallellt. T.ex. en person tar hand om ett paket, en annan tar hand om hur man spelar själva spelet och en ser till att användardialogen blir snygg och funktionell. VIKTIGT! Planera så att ni vet hur ni skall anropa de olika sakerna i paketen och så att ni inte gör så att ni inte får ihop sakerna på slutet.