Java Socket proqramlaşdırma
Java socket proqramlaşdırmadan əvvəl “socket” anlayışını araşdıraq. Socket deyildikdə ilk ağlımıza kompüterin sistem blokunda olan bir parça gəlirAncaq socket kompüterin şəbəkə üzərinden başqa kompüterlər ilə məlumat mübadiləsini təmin edən bir quruluşdur.Şübhəsiz ki, bunu həyata keçirmək üçün bəzi adreslərə ehtiyacımız var. Bunlardan biri bizim kompüterimizin İP adresidir.
IP adresi hansı kompüter ile mübadiləyə girəcəyimizi təyin etməyə köməklik edir. Xəbərləşəcəyimiz kompüterə gedib çatdıqda bunu hansı program vasitəsi ilə həyata keçirəcəyimizi bildirmək gərəkdir.Tam bu əsnada kompüterimizin portları bizə yardımçı olacaq
Kompüterimiz üzərindən birdən çox socket vardır. Hər socket yönümlü program üçün kompüterimizdə fərqli portlar mövcuddur. Nümunə üçün, FTP Serveri 21. Port, TELNET Serverləri ise 23. Portda işləyir.
Socket anlayışına qısaca toxunduq, indi isə Socket Programlaşdırmaya keçə bilərik. 2 fərqli program nümunəsi təqdim edəcəyik.Birinci nümunədə Client Serverə mesaj göndərir(Scanner vasitəsilə) və Server bunu ekrana yazdırır. İkinci nümunəmiz isə daha biraz qarışıqdır. Belə ki, Bir PDF formatlı faylı Clientdən Serverə göndərəcəyik. Əvvəla, Client və Server nədir?
Client , socket programlarda xidmət istəyən bir presessordur(virtual olaraq). İstədiyində serverə qoşulub əmrlər göndərir və geriyə dönən cavabı alır ve yene istədiyində bağlantını kəsə bilir. Daha qısa desək Client göndərən tərəfdir
Server isə, socket programlarda xidmət verən prosessordur. Client serverə qoşulmaq istəyən zaman, qoşula bilməsi için serverın daima açıq olub, Clientin qoşulacağı portu izləməsi gərəkdir.
Clientin serverə qoşula bilməsi üçün serverdə açılan portu dinləməsi gərəkdir. Buna görə də ilk olaraq, Serveri işə salmaq lazımdır
Proyekt 1: Socket vasitəsi ilə Mesaj göndərilməsi
Client kodu:package tcp.client; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; //Java-da Socketləri işə salmaq üçün java.net package-i import edilməlidir import java.util.Scanner; public class TCPClient { public static void main(String[] args) throws IOException { // TODO code application logic here Socket mySocket = new Socket("localhost",1111); // localhost - adresin öz kompüterim olduğunu göstərir DataOutputStream dat = new DataOutputStream(mySocket.getOutputStream()); Scanner sc = new Scanner(System.in); String send = sc.nextLine(); dat.writeBytes(send); mySocket.close(); } }
Server Kodu:
package tcp.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String[] args) throws IOException { // TODO code application logic here ServerSocket serverSocket = new ServerSocket(1111); //Xüsusən Server Socket üçün etdik Bunu while(true) //Yuxarıda qeyd etmişdik ki, Server Daima açıq olmalıdır { Socket mySocket = serverSocket.accept(); InputStreamReader isr = new InputStreamReader(mySocket.getInputStream()); BufferedReader bw = new BufferedReader(isr); String myText = bw.readLine(); System.out.println("You've read: "+myText); } } }
Proyekt 2: Socket vasitəsi ilə PDF göndərilməsi
Bu nümunədə biz bir pdf faylı Client-dən Server-ə göndərəcəyik. Burda Məqsəd tək PDF faylı deyil istənilən nön faylın göndərilməsidir. Yuxarıdakından fərqi isə bu səfər Character Based yox Byte Based sistemlə işləyəcəyikClient kodu:
import java.io.*; import java.net.*; import java.util.*; public class Client { public static void main(String[] args) throws Exception { Socket mySocket = new Socket("localhost",6789); DataOutputStream dat = new DataOutputStream(mySocket.getOutputStream()); Scanner sc = new Scanner(System.in); String path = sc.nextLine(); byte[] bytes = readFromFile(path); dat.write(bytes); dat.close(); } public static byte[] readFromFile(String pathName) { byte[] bytes = null; try(InputStream in = new FileInputStream(pathName)) { File file = new File(pathName); bytes = new byte[(int)file.length()]; in.read(bytes); } catch(Exception ex) { ex.printStackTrace(); } return bytes; } }Server
import java.io.*; import java.net.*; public class Server { public static void main(String[] args) throws Exception { ServerSocket connectionSocket = new ServerSocket(6789); while(true) { Socket mySocket = connectionSocket.accept(); InputStream in = mySocket.getInputStream(); OutputStream out = new FileOutputStream("/home/user/Desktop/huhuh.pdf"); byte[] buffer = new byte[2000]; int read = 0; while((read=in.read())!=-1) { out.write(read); } out.flush(); out.close(); System.out.println("Done!"); } } }