Јава Соцкет програмирање се користи за комуникацију између апликација које раде на различитим ЈРЕ.
Програмирање Јава соцкета може бити оријентисано на везу или без везе.
Класе Соцкет и СерверСоцкет се користе за програмирање сокета оријентисаних на повезивање, а класе ДатаграмСоцкет и ДатаграмПацкет се користе за програмирање сокета без повезивања.
Клијент у програмирању сокета мора да зна две информације:
- ИП адреса сервера и
- Број порта.
Овде ћемо успоставити једносмерну комуникацију између клијента и сервера. У овој апликацији, клијент шаље поруку серверу, сервер чита поруку и штампа је. Овде се користе две класе: Соцкет и СерверСоцкет. Класа Соцкет се користи за комуникацију клијента и сервера. Кроз овај час можемо читати и писати поруке. Класа СерверСоцкет се користи на страни сервера. Метод аццепт() класе СерверСоцкет блокира конзолу док се клијент не повеже. Након успешног повезивања клијента, враћа инстанцу Соцкет-а на страни сервера.
Соцкет цласс
Утичница је једноставно крајња тачка за комуникацију између машина. Класа Соцкет се може користити за креирање утичнице.
Важне методе
Метод | Опис |
---|---|
1) јавни ИнпутСтреам гетИнпутСтреам() | враћа ИнпутСтреам повезан са овом утичницом. |
2) јавни ОутпутСтреам гетОутпутСтреам() | враћа ОутпутСтреам повезан са овом утичницом. |
3) јавна синхронизована воид цлосе() | затвара ову утичницу |
СерверСоцкет цласс
Класа СерверСоцкет се може користити за креирање серверске утичнице. Овај објекат се користи за успостављање комуникације са клијентима.
Важне методе
Метод | Опис |
---|---|
1) јавни соцкет аццепт() | враћа утичницу и успоставља везу између сервера и клијента. |
2) јавна синхронизована воид цлосе() | затвара утичницу сервера. |
Пример програмирања Јава соцкета
Креирање сервера:
Да бисмо креирали серверску апликацију, потребно је да креирамо инстанцу класе СерверСоцкет. Овде користимо број порта 6666 за комуникацију између клијента и сервера. Такође можете изабрати било који други број порта. Метод аццепт() чека клијента. Ако се клијенти повежу са датим бројем порта, он враћа инстанцу Соцкет-а.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Креирање клијента:
Да бисмо креирали клијентску апликацију, потребно је да креирамо инстанцу класе Соцкет. Овде треба да проследимо ИП адресу или име хоста сервера и број порта. Овде користимо 'лоцалхост' јер наш сервер ради на истом систему.
Socket s=new Socket('localhost',6666);
Хајде да видимо једноставно програмирање Јава соцкета где клијент шаље текст, а сервер га прима и штампа.
Датотека: МиСервер.јава
import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } }
Фајл: МиЦлиент.јава
import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } }преузмите овај пример
Да бисте извршили овај програм, отворите две командне линије и покрените сваки програм у свакој командној линији као што је приказано на доњој слици.
Након покретања клијентске апликације, на конзоли сервера ће се приказати порука.
Пример програмирања Јава соцкета (читај-пиши са обе стране)
У овом примеру, клијент ће прво писати серверу, а затим ће сервер примити и одштампати текст. Затим ће сервер писати клијенту, а клијент ће примити и одштампати текст. Корак иде даље.
Датотека: МиСервер.јава
import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }}
Фајл: МиЦлиент.јава
import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}