Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

Universiteti i Prishtinës “Hasan Prishtina”

Fakulteti i Inxhinierisë Elektrike dhe Kompjuterike

Dokumentim teknik i projektit

Lënda: Sisteme Operative

Titulli i projektit: Interprocess communication using unix sockets

Emri profesorit/Asistentit Emri & mbiemri studentëve / email adresa


1.Aridon Krasniqi aridon.krasniqi1@student.uni-pr.edu
Prof. Dr. Artan MAZREKAJ 2.Lorent Sinani lorent.sinani@student.uni-pr.edu
MSc. Daline VRANOVCI 3.Lorik Mustafa lorik.mustafa2@student.uni-pr.edu
4.Meriton Kryeziu meriton.kryeziu@student.uni-pr.edu

Prishtinë, 2022
Interprocess communication using unix sockets

Përmbajtja
I. Përshkrimi i problemit 3

II. Teknologjite e perdorura 7

III. Implementimi 8

Referencat 13

2
Interprocess communication using unix sockets

I. Përshkrimi i problemit
Getting Started with Unix Domain Sockets
Socket-at sigurojnë një mjet komunikimi në mes të proceseve, pra një mënyrë për të shkëmbyer
të dhëna. Mënyra se si funksionon zakonisht komunikimi përmes socket-ave është se procesi A
ka socket-in X dhe processi B ka socket-in Y dhe këta dy socket-a janë të lidhur. Secili proces
mund t'a përdorë socket-in e tij për të marrë të dhëna nga procesi tjetër ose për të dërguar të
dhëna te procesi tjetër. Socket-at mund të përshkruhen si një kanal komunikimi ku të dy palët
mund të lexojnë dhe shkruajnë (Figura 1).

Figura 1. Komunikim mes dy proceseve me çiftin e lidhur te soketave [1]

Pse na duhen socket-at? Proceseve ju duhet një mënyrë që të komunikojnë me njëri-tjetrin.


Ekzistojne dy domene të socket-ave: Unix Domain Sockets, të cilat lejojnë proceset në një
kompjuter të komunikojnë (IPC) dhe Internet Domain Sockets, që lejojnë proceset të
komunikojnë përmes një rrjeti (Figura 2).

Figura 2. Komunikimi mes dy proceseve brenda dhe jasht paisjes. [1]

3
Interprocess communication using unix sockets

Në këtë projekt, në do të përqëndrohemi në Unix Domain Sockets.

● Së pari, do të shohim se si klientët dhe serverët zakonisht komunikojnë përmes


socket-ave. Në mënyrë të veçantë, në do të shqyrtojmë thirrjet sistemore dhe mënyrën se
si ato përdoren në përgjithësi.
● Së dyti, do të shohim implementimin e socket-ave përmes një programi të zhvilluar në
gjuhën C.

Shënim:

Çdo socket ka dy atribute të rëndësishme: një domain dhe një lloj komunikimi. Ka dy lloje
kryesore: stream dhe datagram. Në projekt do të bazohemi në streaming type.

Server Process
Ky procss lidh një socket me një lokacion të njohur dhe pranon kërkersat hyrëse të lidhjes nga
klientat. Për çdo request connection që merret, krijohet një socket i ri që përdoret për
komunikim me peer socket (peer socket = socket-i në anën e fundme të lidhjes, në këtë rast
socket-i i krijuar nga një proces-klient).

1. Serveri krijon një socket të ri duke përdorur thirrjen sistemore socket(). Kjo thirrje kthen
një file descriptor që mund të përdoret për të ju referuar socket-it.
2. Serveri përdor thirrje sistemore bind() për të lidhur socketin në një adresë, kështu që
klienti mundet të konektohet me serverin.
3. Serveri thërret thirrjen sistemore listen() për të bërë socketin pasive listening.
4. Serveri thërret thirrjen sistemore accept() për t'i pranuar lidhjet hyrëse. Kjo thirrje është
bllokuese deri sa vjen një kërkesë për lidhje me serverin. Duhet pasur parasyshë se ky
funksion na jep error nëse thirret para funksionit listen(). Kjo thirrje sistemore krijon një
socket të ri dhe lidhet me socketin peer dhe kthen një file descriptor të lidhur me të. Pra
nëse dëshirojmë të komunikojmë me socketin e peer-it duhet të përdorim file
descriptorin e kthyer nga accept().
5. Pas kësaj, thirrja sistemore read() dhe write() mund të përdoret për komunikim me peer
socket (përshembull, për të komunikuar me klientin).
6. Së fundmi, kur serveri e kryen punën me socket, lidhjen mes socketave duhet t'a
mbyllim me thirrjen sistemore close().

4
Interprocess communication using unix sockets

Figura 2. Komunikimi mes dy proceseve brenda dhe jashtë paisjes [1].

Client Process
Ky process lidh socketin e tij me një socket pasiv (server socket) pas së cilës është i lirë të
komunikojë me peer socket. T'a vërejmë dallimin mes passive socket dhe peer socket. I pari
krijohet duket thirrur socket() funksionin, ndërsa i dyti kthehet me thirrjen accept() (Figura 3).

1. Processi krijon një socket të ri përmes thirrjes socket(), e cila kthen një file descriptor që
përdoret për tiu referuar socketit.
2. Klienti thërret thirrjen sistemore connect(), e cila e lidh socketin e klientit me socketin
pasiv të serverit. Thirrja sistemore connect() duhet të thirret pasi të thirret listen() në
socketin e serverit, përndryshe në procese do ketë error.

5
Interprocess communication using unix sockets

Figura 3. Komunikimi mes dy proceseve i pershkruar me funksionet përshkruese. [1]

6
Interprocess communication using unix sockets

II. Teknologjitë e përdorura

Për t'a dizajnuar programin e kërkuar, IPC me anë të socketave është përdorur text editor-i
VSCode, gjuha programuese C dhe sistemi operativ Ubuntu-Linux.

7
Interprocess communication using unix sockets

III. Implementimi
Për punimin e këtij projekti ne kemi punuar me VS Code [3], varësisht nga pëlqimi juaj mund të
përdoret ndonjë editor tjetër i cili mund të kryej punë por meqenëse është më i përdorshëm
VSCode atëherë ne kemi vazhduar me të. Krijojmë një folder të ri që punën e këtij projekti t'a
kemi më lehtë të qasshme. Hapim terminalin dhe shënojmë komandën: mkdir ipcSockets, për
krijimin e një direktoriumi të ri:

Figura 4. Krijimi i direktoriumit ipcSockets.

Pastaj krijojmë një file me emër sipas dëshires, përshembull ne kemi vendosur emrin
unixclient.c, pra prapashtesa duhet të jetë me .c pasi që do t'a punojmë me gjuhën
programuese C.
Në fajllin e krijuar do t'i thërrasim libraritë e nevojshme që të kemi mundësi të implementojmë
kodin e klientit në rregull. Shtojmë libraritë si në foton më poshtë:

Figura 5. Përfshirja e librarive të jashtme.

8
Interprocess communication using unix sockets

Pas librarive do t'a shënojmë kodin i cili do t'a krijoj socket-in e ri me argumentet e duhura.

Figura 6. Krijimi i socket-it klient.

Pastaj krijojmë lidhjen me serverin, konfigurojmë adresën dhe shfaqjen e mesazhit në rast errori.

Figura 7. Lidhja me soketin e serverit.

Në fund shkruajmë kodin i cili do të shfaq në server atë se qfarë shënojmë ne dhe mbylljen e
socket-it.

9
Interprocess communication using unix sockets

Kështu përfundojmë pjesën e klientit, dhe do vazhdojmë me pjesën e serverit e cila është paksa
më e gjatë sesa e klientit por megjithatë lehtë e kuptueshme.

Figura 8. Krijimi i socketit në server.

Sikurse për klientin fillojmë duke krijuar një fajll i cili emërohet unixserver.c, dhe bëjmë thirrjen
e librarive pothuajse të ngjashme, e poashtu edhe krijimi i socketit.
Pjesa që dallon është si më poshtë dhe vazhdon:

Figura 9. Validimi i adresës së socket-it, alokimi i memorjes për ruajtjen e adresës.

10
Interprocess communication using unix sockets

Pastaj vazhdojmë me pjesën tjetër ku bëjmë lidhjen e socket-it me adresën (Figura 10):

Figura 10. Lidhja e soketit me adresën

Vazhdojmë me konfigurimin e pranimit të lidhjes me klient (Figura 11):

Figura 11. Lidhja e socketit dhe ndëgjimi në atë socket.

Në fund shohim pjesën e transferimit të të dhënave dhe mbylljen e serverit, po ashtu edhe
pjesën se çfarë të ndodh në rast të paraqitjes së ndonjë errori (Figura 12).

11
Interprocess communication using unix sockets

Figura 12. Marrja e të dhënave të shkëmbyera në buffer dhe printimi i tyre në standard output.

Pasi kemi përfunduar shkruarjen e kodit, e ruajmë file-at dhe i kompajllojmë me komandën e
treguar në figurën më poshtë (Figura 13):

Figura 13. Komanda për kompajllim

Pasi t'a kemi kompajlluar file-in e klientit vazhdojmë njëjtë edhe për serverin. Pastaj shënojmë
komandën për ekzekutim, ku së pari ekzekutojmë serverin pastaj klientin, dhe shohim në
figurën më poshtë (Figura 14):

Figura 14. Komanda për ekzekutim

Njëjtë ekzekutojmë edhe klientin, dhe pastaj fillojmë të shënojmë çfarëdo nga klienti dhe do të
na shfaqet edhe në server (Figura 15):

Figura 15. Demostrim i komunikimit mes dy proceseve në modelin klient server.

12
Interprocess communication using unix sockets

Referencat

[1] Operating Systems - Processes [Online].


Available: https://www.tutorialspoint.com/operating_system/os_processes.htm
(accessed Dec. 4, 2022).

[2] Getting Started With Unix Domain Sockets [Online].


Available:
https://medium.com/swlh/getting-started-with-unix-domain-sockets-4472c0db4eb1
(accessed Dec. 4, 2022).

[3] Visual Studio Code - Code Editing. Redefined (2022) [Online].


Available: https://code.visualstudio.com/

13

You might also like