Bài giảng lập trình ứng dụng mạng bài 2 GV võ tấn dũng

66 178 0
Bài giảng lập trình ứng dụng mạng  bài 2   GV  võ tấn dũng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI GIẢNG VIÊN: VÕ TẤN DŨNG GV: Võ Tấn Dũng L ẬP TRÌNH SOCKET LẬP KHÁI NIỆM SOCKET „ „ Socket phương pháp để thiết lập kết nối truyền thông chương trình yêu cầu dịch vụ (client) chương trình cung cấp dịch vụ (server) mạng LAN, WAN hay Internet Trước yêu cầu dịch vụ từ máy chủ máy khách phải kết nối đến máy chủ Quá trình kết nối Java thực thông chế trừu tượng hóa gọi Socket Việc kết nối thông qua Socket cần hai thông tin chủ yếu địa máy cần kết nối số hiệu cổng chương trình dịch vụ GV: Võ Tấn Dũng „ PHẦN GV: Võ Tấn Dũng LLớp ớp InetAddress InetAddress & ớp URL & llớp URL Lớp InetAddress „ Lớp InetAddress sử dụng để biểu diễn địa IP ứng dụng mạng Lớp sử dụng hầu hết lớp mạng, bao gồm Socket, ServerSocket, URL, DatagramSocket, DatagramPacket,… Nó bao gồm hai trường thông tin: hostName (một đối tượng kiểu String) address (một số kiểu int) Các trường trường public, ta truy xất chúng trực tiếp GV: Võ Tấn Dũng „ Lớp InetAddress „ Lớp InetAddress constructor cho lớp InetAddress Tuy nhiên, có ba phương thức tĩnh trả đối tượng InetAddress: – public static InetAddress InetAddress.getByName(String hostname) – public static InetAddress[] InetAddress.getAllByName(String hostname) – public static InetAddress InetAddress.getLocalHost() Tất phương thức thực kết nối tới server DNS cục để biết thông tin đối tượng InetAddress GV: Võ Tấn Dũng „ Lớp InetAddress Ví dụ: Phương thức getByName nhận tên hostname làm tham số trả đối tượng kiểu InetAddress try{ InetAddress dc =InetAddress.getByName(“www.microsoft.com”); System.out.println(dc); } catch(UnknownHostException e) { System.err.println(e); } GV: Võ Tấn Dũng „ Lớp InetAddress Ví dụ 1:Viết chương trình nhận hostname từ đối dòng lệnh in địa IP tương ứng với hostname import java.net.*; public class TimDCIP { public static void main(String[] args) {try{ if(args.length!=1) { System.out.println("Cach su dung: java TimDCIP ");} InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName(); System.out.println("Host name:"+hostName); System.out.println("Dia chi IP:"+host.getHostAddress()); } catch(UnknownHostException e) { System.out.println("Khong tim thay dia chi"); return; } } } GV: Võ Tấn Dũng „ Lớp InetAddress GV: Võ Tấn Dũng Có thể đọc trường InetAddress cách gọi phương thức getHostname getAddress(): „ public String getHostName(): Phương thức trả chuỗi biểu diễn hostname đối tượng InetAddress Nếu máy hostname, trả địa IP máy dạng xâu ký tự „ public byte[ ] getAddress() : Nếu bạn muốn biết địa IP máy, phương thức getAddress() trả địa IP dạng mảng byte Lớp InetAddress Ví dụ: Viết chương trình nhập hostName từ đối dòng lệnh in dòng thông báo cho biết địa IP tương ứng với địa IP thuộc lớp import java.net.*; public class PhanLoaiDCIP { public static void main(String[] args) {try{ if(args.length!=1) {System.out.println("Cach su dung: java TimDCIP ");} InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName(); System.out.println("Host name:"+hostName); System.out.println("Dia chi IP:"+host.getHostAddress()); byte[] b=host.getAddress(); int i=b[0]>=0?b[0]:256+b[0]; if((i>=1)&(i0) { hostname=args[0]; try{ } catch(Exception e){ port =Integer.parseInt(args[1]); } } else { hostname="127.0.0.1"; } 60 GV: Võ Tấn Dũng Ví dụ minh họa giao thức UDP (CLIENT) try{ } InetAddress dc=InetAddress.getByName(hostname); BufferedReader userInput=new BufferedReader (new InputStreamReader(System.in)); DatagramSocket ds =new DatagramSocket(port); while(true){ String line=userInput.readLine(); if(line.equals("exit"))break; byte[] data=line.getBytes(); DatagramPacket dp=new DatagramPacket (data,data.length,dc,port); ds.send(dp); dp.setLength(65507); ds.receive(dp); ByteArrayInputStream bis =new ByteArrayInputStream(dp.getData()); BufferedReader dis =new BufferedReader(new InputStreamReader(bis)); System.out.println(dis.readLine()); } 61 GV: Võ Tấn Dũng Ví dụ minh họa giao thức UDP (CLIENT) Ví dụ minh họa giao thức UDP (CLIENT) catch(UnknownHostException e) { System.err.println(e); } catch(IOException e) { System.err.println(e); } 62 GV: Võ Tấn Dũng } Ví dụ minh họa giao thức UDP (SERVER) public class UDPServer { public final static int CONG_MAC_DINH=9; public static void main(String args[]) { int port=CONG_MAC_DINH; 63 GV: Võ Tấn Dũng try{ } catch(Exception e){ port =Integer.parseInt(args[1]); } Ví dụ minh họa giao thức UDP (SERVER) DatagramSocket ds =new DatagramSocket(port); DatagramPacket dp=new DatagramPacket(new byte[65507],65507); while(true){ ds.receive(dp); ByteArrayInputStream bis =new ByteArrayInputStream(dp.getData()); BufferedReader dis =new BufferedReader(new InputStreamReader(bis)); String s=dis.readLine(); System.out.println(s); s.toUpperCase(); dp.setData(s.getBytes()); dp.setLength(s.length()); dp.setAddress(dp.getAddress()); dp.setPort(dp.getPort()); ds.send(dp); } } 64 GV: Võ Tấn Dũng try{ Ví dụ minh họa giao thức UDP (SERVER) catch(UnknownHostException e) { System.err.println(e); } catch(IOException e) { System.err.println(e); } } 65 GV: Võ Tấn Dũng } GV: Võ Tấn Dũng HẾT B ÀI 22 BÀI [...]... trong gói dữ liệu 29 GV: Võ Tấn Dũng dữ liệu PHẦN 3 GV: Võ Tấn Dũng LLẬP ẬP TRÌNH TRÌNH TCP TCP Socket Socket 31 GV: Võ Tấn Dũng Mô hình truyền tin Socket Quy trình phía Client Các bước cài đặt chương trình phía Client bằng Java: „ Bước 1:Tạo một đối tượng Socket – Bước 2: Tạo một luồng xuất để có thể sử dụng để gửi thông tin tới Socket – „ Bước 3:Tạo một luồng nhập để đọc thông tin đáp ứng từ server –... while((line=in.readLine())!=null) { System.out.println(line); } }catch (Exception e) { //quá trình mở và kết nối đến trang web bị lỗi System.out.println(e); } 17 GV: Võ Tấn Dũng „ PHẦN 2 GV: Võ Tấn Dũng C ác llớp ớp Socket Các Một số lớp Socket và Datagram „ „ „ „ Lớp Socket Lớp ServerSocket Lớp DatagramSocket Lớp DatagramPackage Chú ý: Lập trình Socket truyền dữ liệu sẽ liên quan đến hai giao thức ở tầng Transport... chủ 22 GV: Võ Tấn Dũng „ Các VD về Socket cho Client „ public Socket(String host, int port) throws UnknownHostException, IOException: hàm này tạo một socket TCP với host và cổng xác định, và thực hiện liên kết với host ở xa Ví dụ: try{ Socket s = new Socket( “www.vnn.vn”,80); } catch(UnknownHostException e){ System.err.println(e); } catch(IOException e){ System.err.println(e); } 23 GV: Võ Tấn Dũng. .. hostname=args[0]; } PrintWriter pw=null; BufferedReader br=null; try{ Socket s=new Socket(hostname ,20 07); br=new BufferedReader(newInputStreamReader (s.getInputStream())); 33 GV: Võ Tấn Dũng VD: Quy trình phía Client VD: Quy trình phía Client } 34 GV: Võ Tấn Dũng BufferedReader user=new BufferedReader (new InputStreamReader(System.in)); pw=new PrintWriter(s.getOutputStream()); System.out.println("Da ket noi duoc voi... MalformedURLException – public URL(URL u, String s) throws MalformedURLException 11 GV: Võ Tấn Dũng „ Lớp URL „ „ public URL(String url) throws MalformedURLException Đây là constructor đơn giản nhất; tham số của nó chỉ là một URL ở dạng chuỗi Ví dụ try{ } catch(MalformedURLException e) { System.err.println(e); } 12 GV: Võ Tấn Dũng URL u = new URL(“http://www.sun.com/index.html”); Lớp URL public URL(String... PrintWriter, ta sử dụng các phương thức print và println, tương tự như System.out.println Đối với luồng nhập, BufferedReader, ta có thể sử dụng phương thức read() để đọc một ký tự, hoặc một mảng các ký tự, hoặc gọi phương thức readLine() để đọc vào một dòng ký tự Cần chú ý rằng phương thức readLine() trả về null nếu kết thúc luồng Bước 5: Đóng socket khi hoàn thành quá trình truyền tin 32 GV: Võ Tấn Dũng „ Socket... void close() throws IOException: dùng để máy chủ cắt đứt mọi kết nối đến các client 26 GV: Võ Tấn Dũng „ Lớp ServerSocket „ Ví dụ: đoạn mã sau sẽ tạo một đối tượng ServerSocket trên máy chủ luôn luôn lắng nghe kết nối từ máy khách gửi đến qua số cổng 123 4: ServerSocket server=new ServerSocket( 123 4); Socket client; //chương trình server sẽ dừng lại tại đây để chờ đợi sự kết nối client=server.accept(); //có... System.out.println(br.readLine()); } VD: Quy trình phía Client } } 35 GV: Võ Tấn Dũng catch(IOException e) { System.err.println(e); } finally{ try{ if(br!=null)br.close(); if(pw!=null)pw.close(); } catch(IOException e) { System.err.println(e); } } Quy trình phía Server Các bước để cài đặt chương trình Server bằng Java: „ Bước 1: Tạo một đối tượng ServerSocket – ServerSocket ss=new ServerSocket(port) „ Bước 2: Tạo một đối tượng... System.err.println(e); } catch(IOException e){ System.err.println(e); } } } } 24 GV: Võ Tấn Dũng Các VD về Socket cho Client Các VD về Socket cho Client Ví dụ: đoạn mã sau sẽ thực hiện kết nối với máy chủ có địa chỉ “my.testing.server” và mở ra hai luồng xuất nhập để đọc và gửi thông tin đến máy chủ theo số cổng 123 4 try{ Socket me=new Socket(“my.testing.server”, 123 4); //luồng nhập để đọc thông tin trả về từ máy chủ kết... System.err.println(e); } 14 GV: Võ Tấn Dũng „ „ „ „ public URL(URL u, String s) throws MalformedURLException Ví dụ URL u1,u2; try{ URL u1= new URL(“http://www.macfaq.com/index.html”); URL u2 = new URL(u1,”vendor.html”); } catch(MalformedURLException e) { System.err.println(e); } Tên file sẽ được loại khỏi đường dẫn của u1, và tên file mới vendor.html được gán vào để tạo lên u2 Constructor này đặc biệt ... gói liệu 29 GV: Võ Tấn Dũng liệu PHẦN GV: Võ Tấn Dũng LLẬP ẬP TRÌNH TRÌNH TCP TCP Socket Socket 31 GV: Võ Tấn Dũng Mô hình truyền tin Socket Quy trình phía Client Các bước cài đặt chương trình. .. Socket(hostname ,20 07); br=new BufferedReader(newInputStreamReader (s.getInputStream())); 33 GV: Võ Tấn Dũng VD: Quy trình phía Client VD: Quy trình phía Client } 34 GV: Võ Tấn Dũng BufferedReader... khác 40 GV: Võ Tấn Dũng Sử dụng đa tuyến (multithread) VD sử dụng đa tuyến Trong phần xem xét cách tiến hành cài đặt chương trình client/server đa tuyến (multi-thread) 41 GV: Võ Tấn Dũng „ import

Ngày đăng: 04/12/2015, 07:39

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan