Academia.eduAcademia.edu
L P TRÌNH M NG DÙNG SOCKET Bài Gi ng 2 Khoa H c và K Thu t Máy Tính KHÁI NI M V SOCKET Socket API – – – – Ð c gi i thi u BSD4.1 UNIX, 1981 Ð c ng d ng kh i t o, s d ng và h y b . Dùng cơ ch client/server Cung c p hai d ch v chuy n d li u thông qua socket API: • unreliable datagram • reliable, byte stream-oriented Khoa Khoa H c và K Thu t Máy Tính KHÁI NI M V SOCKET Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Thi t k gi i thu t cho client – Gi i thu t cho ch ơng trình client dùng UDP Xác nh a ch server. T o socket. G i/nh n d li u theo giao th c l p ng d ng ã thi t k . óng socket. – Gi i thu t cho ch ơng trình client dùng TCP Xác nh a ch server T o socket. K t n i n server. G i/nh n d li u theo giao th c l p ng d ng ã thi t k . óng k t n i. Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Thi t k gi i thu t cho Server – Ch ơng trình server có hai lo i: L p(iterative) ng th i (concurrent). – Hai d ng giao th c ch ơng trình server: Connection-oriented Connectionless. Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Khoa Khoa H c và K Thu t Máy Tính THI T K GI I THU T CLIENT/SERVER Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA Gói java.net – – – – – – InetAddress ServerSocket Socket URL URLConnection DatagramSocket Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA InetAddress class – – Class mô t v a ch IP (Internet Protocol) Các ph ơng th c getLocalHost, getByName, hay getAllByName t o m t InetAddress instance: public static InetAddess InetAddress.getByName(String hostname) public static InetAddess [] InetAddress.getAllByName(String hostname) public static InetAddess InetAddress.getLocalHost() – l y a ch IP hay tên dùng các ph ơng th c: getHostAddress() getHostName() Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA In a ch IP c a 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"); } } } Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA In a ch IP c a 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"); } } } Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA Các ch – ng trình T om t c thêm a ch IP t m ng byte, chu i String. InetAddressFactory.java – Cho m t a ch tìm tên máy. ReverseTest.java Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA Socket class – – Class mô t v socket T o m t 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() Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA Socket class (ti p theo) – – L y thông tin v m t socket InetAddress getInetAddress() : tr v a ch mà socket k t n i n. int getPort() : tr v a ch mà socket k t n i n. InetAddress getLocalAddress() : tr v a ch c c b . int getLocalPort() : tr v a ch c c b . S d ng Streams public OutputStream getOutputStream() throws IOException Tr v m t output stream cho vi c vi t các byte n socket này. public InputStream getInputStream() throws IOException Tr v m t input stream cho vi c c các byte t socket này. Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA K t n i ê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()); Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA K t n i ên 1 s webserver (ti p 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 Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA ServerSocket class – – Class mô t v ServerSocket T o m t ServerSocket ServerSocket(int port) throws IOException ServerSocket(int port, int backlog) throws IOException ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA ServerSocket class – Các ph ơng th c trong ServerSocket Socket accept() throws IOException : L!ng nghe m t k t n i n socket này và ch p nh n nó. void close() throws IOException : óng socket. InetAddress getInetAddress() : tr v a ch c c b c a socket int getLocalPort() : Tr v port mà server ang l!ng nghe. void setSoTimeout(int timeout) throws SocketException Enable/disable SO_TIMEOUT v i khai báo timeout (milliseconds) Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN 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); Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH M NG TRÊN JAVA DateTime Server (ti p 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); } } } Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH SOCKET V I UDP Cung c p cơ ch truy n không tin c y gi a các nhóm các byte (datagrams) gi a client và server. Không c"n thi t l p k t n i gi a client và server. Sender ph i g i kèm a ch IP và port ích Server khi nh n d li u s# phân tích a ch c a sender truy n l i. Có th server ch p nh n nhi u client t i m t th i i m. Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH SOCKET V I UDP Khoa Khoa H c và K Thu t Máy Tính VÍ D (UDP Client) Khoa Khoa H c và K Thu t Máy Tính VÍ D (UDP Client) Khoa Khoa H c và K Thu t Máy Tính VÍ D (UDP Server) Khoa Khoa H c và K Thu t Máy Tính VÍ D (UDP Server) Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH SOCKET V I TCP Server – – Server process ph i ch y tr Server ph i t o m t socket client. c. l!ng nghe và ch p nh n các k t n i t Client – – – Kh i t o TCP socket. Xác nh IP address, port number c a server. Thi t l p k t n i n server. Khi server nh n yêu c"u k t n i, nó s# ch p nh n yêu c"u và kh i t o socket m i giao ti p v i client. – Có th server ch p nh n nhi u client t i m t th i i m. Khoa Khoa H c và K Thu t Máy Tính L P TRÌNH SOCKET V I TCP Khoa Khoa H c và K Thu t Máy Tính Khoa Khoa H c và K Thu t Máy Tính Khoa Khoa H c và K Thu t Máy Tính Khoa Khoa H c và K Thu t Máy Tính Khoa Khoa H c và K Thu t Máy Tính BÀI T P Vi t ch ng trình trên Java/C t nslookup: – – – Cho 1 tên tìm ra a ch IP. Cho 1 a ch IP tìm ra tên. Giao di n t ơng t$ nh sau: Khoa Khoa H c và K Thu t Máy Tính ng t nh