Bi Ging 2 LP TRNH MNG DNG SOCKET Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 2 KHI NIM V SOCKET Socket API c gii thiu BSD4.1 UNIX, 1981 c ng dng khi to, s dng v hy b. Dng c ch client/server Cung cp hai dch v chuyn d liu thng qua socket API: unreliable datagram reliable, byte stream-oriented Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 3 KHI NIM V SOCKET Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 4 THIT K GII THUT CLIENT/SERVER Thit k gii thut cho client Gii thut cho chng trnh client dng UDP Xc nh a ch server. To socket. Gi/nhn d liu theo giao thc lp ng dng thit k. ng socket. Gii thut cho chng trnh client dng TCP Xc nh a ch server To socket. Kt ni n server. Gi/nhn d liu theo giao thc lp ng dng thit k. ng kt ni. Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 5 THIT K GII THUT CLIENT/SERVER Thit k gii thut cho Server Chng trnh server c hai loi: Lp(iterative) ng thi (concurrent). Hai dng giao thc chng trnh server: Connection-oriented Connectionless. Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 6 THIT K GII THUT CLIENT/SERVER Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 7 THIT K GII THUT CLIENT/SERVER Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 8 THIT K GII THUT CLIENT/SERVER Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 9 THIT K GII THUT CLIENT/SERVER Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 10 THIT K GII THUT CLIENT/SERVER Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 11 THIT K GII THUT CLIENT/SERVER Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 12 LP TRNH MNG TRN JAVA Gi java.net InetAddress ServerSocket Socket URL URLConnection DatagramSocket Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 13 LP TRNH MNG TRN JAVA InetAddress class Class m t v a ch IP (Internet Protocol) Cc phng thc getLocalHost, getByName, hay getAllByName to mt InetAddress instance: public static InetAddess InetAddress.getByName(String hostname) public static InetAddess [] InetAddress.getAllByName(String hostname) public static InetAddess InetAddress.getLocalHost() ly a ch IP hay tn dng cc phng thc: getHostAddress() getHostName() Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 14 LP TRNH MNG TRN JAVA In a ch IP ca localhost import java.net.*; public class HostInfo { public static void main(String args[]) { HostInfo host = new HostInfo(); host.init(); } public void init() { try { InetAddress myHost = InetAddress.getLocalHost(); System.out.println(myHost.getHostAddress()); System.out.println(myHost.getHostName()); } catch (UnknownHostException ex) { System.err.println("Cannot find local host"); } } } Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 15 LP TRNH MNG TRN JAVA In a ch IP ca proxy.hcmut.edu.vn import java.net.*; class kku{ public static void main (String args[]) { try { InetAddress[] addresses = InetAddress.getAllByName(proxy.hcmut.edu.vn"); for (int i = 0; i < addresses.length; i++) { System.out.println(addresses[i]); } } catch (UnknownHostException e) { System.out.println("Could not find proxy.hcmut.edu.vn"); } } } Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 16 LP TRNH MNG TRN JAVA Cc chng trnh c thm To mt a ch IP t mng byte, chui String. InetAddressFactory.java Cho mt a ch tm tn my. ReverseTest.java Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 17 LP TRNH MNG TRN JAVA Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 18 LP TRNH MNG TRN JAVA Socket class Class m t v socket To mt socket Socket(InetAddress address, int port) Socket(String host, int port) Socket(InetAddress address, int port, InetAddress, localAddr, int localPort) Socket(String host, int port, InetAddress, localAddr, int localPort) Socket() Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 19 LP TRNH MNG TRN JAVA Socket class (tip theo) Ly thng tin v mt socket InetAddress getInetAddress() : tr v a ch m socket kt ni n. int getPort() : tr v a ch m socket kt ni n. InetAddress getLocalAddress() : tr v a ch cc b. int getLocalPort() : tr v a ch cc b. S dng Streams public OutputStream getOutputStream() throws IOException Tr v mt output stream cho vic vit cc byte n socket ny. public InputStream getInputStream() throws IOException Tr v mt input stream cho vic c cc byte t socket ny. Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 20 LP TRNH MNG TRN JAVA Kt ni n 1 s webserver import java.net.*; import java.io.*; public class getSocketInfo { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { try { Socket theSocket = new Socket(args[i], 80); System.out.println("Connected to " + theSocket.getInetAddress() + " on port " + theSocket.getPort() + " from port " + theSocket.getLocalPort() + " of " + theSocket.getLocalAddress()); Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 21 LP TRNH MNG TRN JAVA Kt ni n 1 s webserver (tip theo) } catch (UnknownHostException e) { System.err.println("I can't find " + args[i]); } catch (SocketException e) { System.err.println("Could not connect to " + args[i]); } catch (IOException e) { System.err.println(e); } } // end for } // end main } // end getSocketInfo Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 22 LP TRNH MNG TRN JAVA ServerSocket class Class m t v ServerSocket To mt ServerSocket ServerSocket(int port) throws IOException ServerSocket(int port, int backlog) throws IOException ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 23 LP TRNH MNG TRN JAVA ServerSocket class Cc phng thc trong ServerSocket Socket accept() throws IOException : Lng nghe mt kt ni n socket ny v chp nhn n. void close() throws IOException : ng socket. InetAddress getInetAddress() : tr v a ch cc b ca socket int getLocalPort() : Tr v port m server ang lng nghe. void setSoTimeout(int timeout) throws SocketException Enable/disable SO_TIMEOUT vi khai bo timeout (milliseconds) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 24 LP TRNH MNG TRN JAVA DateTime Server import java.net.*; import java.io.*; import java.util.Date; public class DayTimeServer { public final static int daytimePort = 5000; public static void main(String[] args) { ServerSocket theServer; Socket theConnection; PrintStream p; try { theServer = new ServerSocket(daytimePort); Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 25 LP TRNH MNG TRN JAVA DateTime Server (tip theo) while (true) { theConnection = theServer.accept(); p = new PrintStream(theConnection.getOutputStream()); p.println(new Date()); theConnection.close(); theServer.close(); } }catch (IOException e) { System.err.println(e); } } } Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 26 LP TRNH SOCKET VI UDP Cung cp c ch truyn khng tin cy gia cc nhm cc byte (datagrams) gia client v server. Khng cn thit lp kt ni gia client v server. Sender phi gi km a ch IP v port ch Server khi nhn d liu s phn tch a ch ca sender truyn li. C th server chp nhn nhiu client ti mt thi im. Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 27 LP TRNH SOCKET VI UDP Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 28 V D (UDP Client) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 29 V D (UDP Client) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 30 V D (UDP Server) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 31 V D (UDP Server) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 32 LP TRNH SOCKET VI TCP Server Server process phi chy trc. Server phi to mt socket lng nghe v chp nhn cc kt ni t client. Client Khi to TCP socket. Xc nh IP address, port number ca server. Thit lp kt ni n server. Khi server nhn yu cu kt ni, n s chp nhn yu cu v khi to socket mi giao tip vi client. C th server chp nhn nhiu client ti mt thi im. Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 33 LP TRNH SOCKET VI TCP Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 34 V D (TCP Client) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 35 V D (TCP Client tip theo) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 36 V D (TCP Server) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 37 V D (TCP Server tip theo) Trng ai Hoc Bach Khoa Tp.HCM Khoa Khoa Hc v K Thut My Tnh Trang 38 BI TP Vit chng trnh trn Java/C tng t nh nslookup: Cho 1 tn tm ra a ch IP. Cho 1 a ch IP tm ra tn. Giao din tng t nh sau: