Ukeoppgave 2: Berkeley Sockets

Innledning

Målet med disse oppgavene er å minne om Berkeley sockets og hvordan man bruker dem i programmering. De praktiske oppgavene i INF3190/INF4190 vil kreve utvikling av programmvare basert på Berkeley sockets og implementert på Linux. De fleste vil ha gjort erfaringer med dette i INF1060. For alle andre er det sterkt anbefalt å oppdatere sitt kunnskap før de obligatoriske oppgavene legges ut.

Oppgaver

Programmeringsoppgaven skal løses på en maskin av type unix; enten linux eller solaris.

1. Lagdeling

Hvilke lag finnes i OSI referansemodellen og hvilke lag finnes i Internet referansemodellen?

Hva er oppgavene til lagene 1 til 4 i OSI referansemodellen? (Dette spørsmalet stilles slik siden Internetmodellen er den viktigere i dag, men i den modellen er lagene 1 og 2 slått sammen. Realiteten viser at det fortsatt er viktig å skille mellom de to lagene, også i Internetverden i dag.)

2. Protokoller og tjenester

Forklar hva en protokoll er, hva en tjeneste er og hvordan de henger sammen. Støtt forklaringen med en tegning.

3. Socketprogrammering

Lag et enkelt chatprogramm.

Programmet skal kjøre på to maskiner (eller i to vinduer på den sammen maskinen), og alt som skrives på den ene maskinen skal også vises på den andre. Det skal gå begge veier helt likt.

For kommunikasjonen skal dere bruke transportlagsprotokollen TCP.

En ulikhet oppstår da ved oppstart, fordi programmet på den ene maskinen må gjøre seg klar til å vente en oppkobling fra den andre. Programmet på den andre maskin må så koble seg opp.

Dere skal skrive et programm som er i stand til å både vente på oppkobling (virke som en tjener) og kunne koble seg opp (virke som en klient). Hvis programmet startes uten parametere på en datamaskin, så skal det kjøre som tjener og vente på en oppkobling fra en klient. Hvis programmet startes med et maskinnavn som parameter, så skal det kjøre som klient og prøve å koble seg opp til en tjener som kjører på den gitte maskinen.

Når en TCP-forbindelse er opprettet skal de to sidene virke like. Hvis dere skriver nå på den ene siden skal det overføres og også vises på den andre siden. Det er i denne oppgaven ikke nødvendig at begge sider kan skrive til enhver tid. Løsningen anses som korrekt hvis bare den ene maskinen kan skrive en linje, og må deretter vente på svar fra den andre maskinen.

Dette er selvfølgelig ikke noen god måte for et chat-program til å virke på, gjerne finn løsninger for problemet. En løsning basert på select() kan fungere bra?

Publisert 4. feb. 2011 15:16