LP TRNH JAVA NC Chng 07 LP TRNH

  • Slides: 34
Download presentation
LẬP TRÌNH JAVA NC Chương 07: LẬP TRÌNH CLIENT/SERVER Lê Tân Bộ môn: Lập

LẬP TRÌNH JAVA NC Chương 07: LẬP TRÌNH CLIENT/SERVER Lê Tân Bộ môn: Lập trình máy tính

Nội dung của chương 07 F Giao tiếp trên Internet F Dịch vụ Server

Nội dung của chương 07 F Giao tiếp trên Internet F Dịch vụ Server và khái niệm cổng F Giao tiếp Client/Server và Socket F Các F Sử lớp cần thiết của gói thư viện java. net dụng TCP Socket F Xây dựng chương trình ở Client F Xây dựng chương trình ở Server

Tầng ứng dụng Mục đích: F Định nghĩa, sự hoạt động của các giao

Tầng ứng dụng Mục đích: F Định nghĩa, sự hoạt động của các giao thức trong tầng ứng dụng. – Kiểu khách - người phục vụ (clientserver) – Những mô hình phục vụ – Tìm hiểu về các giao thức trên tầng ứng dụng thông qua các ví dụ cụ thể. Nâng cao F Các giao thức đặc biệt: – HTTP – ftp – SMTP – pop – dns F Lập trình các ứng dụng mạng socket API

Trình ứng dụng và giao thức tầng ứng dụng Trình ứng dụng : truyền

Trình ứng dụng và giao thức tầng ứng dụng Trình ứng dụng : truyền thông, các tiến trình phân tán – Chạy trên các host(“user space”) – Trao đổi thông điệp. – e. g. , email, ftp, Web application transport network data link physical Giao thức tầng ứng dụng – Là một phần của trình ứng dụng. – Xác đình thông điệp trao đổi giữa các ứng dụng. – Sử dụng các dịch vụ truyền thông cung cấp bởi các giao thức tầng dưới (TCP, UDP) application transport network data link physical

Một số thuật ngữ trình ứng dụng mạng Tiến trình : là chương trình

Một số thuật ngữ trình ứng dụng mạng Tiến trình : là chương trình chạy trên host. F Trong cùng một host, hai tiến trình có thể truyền thông với nhau qua interprocess communication (điều khiển bởi hệ điều hành). F Các tiến trình chạy trên các host khác nhau truyền thông qua giao thức tầng ứng dụng. F user agent: là phần mềm xử lý giao diện giữa người dùng và mạng. – Thực hiện theo các giao thức tầng ứng dụng. – Web: browser – E-mail: mail reader – streaming audio/video: media player

Mô hình Client-Server Đặc trưng cho ứng dụng gồm hai thành phần : client

Mô hình Client-Server Đặc trưng cho ứng dụng gồm hai thành phần : client và server Client: F Khởi tạo giao tiếp với server (“speaks first”) F Yêu cầu dịch vụ từ server. F Web : client nhận và hiển thị web page ; e-mail: các trình đọc thư. Server: F Cung cấp những dịch vụ được yêu cầu từ Client F e. g. , Web server gửi Web page, Mail server phân phát e-mail application transport network data link physical request reply application transport network data link physical

Giao thức tầng ứng dụng Q: Phân biệt các tiến trình API: application bằng

Giao thức tầng ứng dụng Q: Phân biệt các tiến trình API: application bằng cách nào? programming interface – Địa chỉ IP của host. F Định ra giao diện giữa tầng ứng dụng và tầng – “Số hiệu cổng”: cho mạng. phép bên host nhận phân biết các tiến F Socket : Internet API trình cục bộ. – Hai tiến trình truyền thông bằng cách Dịch vụ Cổng FPT 21 gửi/đọc dữ liệu HTTP 80 vào/từ socket. Telnet Finger SMTP 23 79 25

Các dịch vụ tầng giao vận cung cấp cho ứng dụng? Mất mát dữ

Các dịch vụ tầng giao vận cung cấp cho ứng dụng? Mất mát dữ liệu(Data loss) F Một số ứng dụng(e. g. , audio) có thể chấp nhận một số mất mát. F Một số ứng dụng lại đòi hỏi (e. g. , file transfer, telnet) 100% dữ liệu truyền tin cậy. Thời gian(Timing) F Một số ứng dụng (e. g. , hội thoại qua Internet, các trò chơi hành động) đòi hỏi độ trễ thấp. Băng thông(Bandwidth) F Một số ứng dụng(e. g. , multimedia) yêu cầu băng thông tối thiểu để có thể truyền thông hiệu quả. F Một số ứng dụng khác (“elastic apps”) lại có thể sử dụng bất cứ băng thông nào mà chúng nhận được.

Các yêu cầu cho một số ứng dụng Data loss Bandwidth Time Sensitive file

Các yêu cầu cho một số ứng dụng Data loss Bandwidth Time Sensitive file transfer e-mail Web documents real-time audio/video no loss-tolerant no no no yes, 100’s msec stored audio/video interactive games financial apps loss-tolerant no loss elastic audio: 5 Kb-1 Mb video: 10 Kb-5 Mb same as above few Kbps up elastic Application yes, few secs yes, 100’s msec yes and no

Dịch vụ của các giao thức giao vận trên Internet Dịch vụ TCP: F

Dịch vụ của các giao thức giao vận trên Internet Dịch vụ TCP: F Hướng kết nối : Yêu cầu thiết lập kết nối giữa client và server. F Truyền dữ liệu tin cậy giữa tiến trình gửi và nhận F Điều tiết luồng : bên gửi sẽ không làm “lụt” bên nhận. F Điều tiết tắc nghẽn: điều chỉnh tốc độ gửi khi mạng quá tải. F Không hỗ trợ : thời gian, băng thông tối thiểu. Dịch vụ UDP: F Truyền dữ liệu không tin cậy giữa các tiến trình gửi và nhận. F Không hỗ trợ : thiết lập kết nối, độ tin cậy, điều tiết luồng, điều tiết tắc nghẽn, thời gian, băng thông tối thiểu. Q: Tại sao một số ứng dụng dùng UDP?

Các ứng dụng trên Internet và giao thức giao vận tương ứng Application e-mail

Các ứng dụng trên Internet và giao thức giao vận tương ứng Application e-mail remote terminal access Web file transfer streaming multimedia remote file server Internet telephony Application layer protocol Underlying transport protocol SMTP [RFC 821] telnet [RFC 854] HTTP [RFC 2068] ftp [RFC 959] proprietary (e. g. Real. Networks) NSF proprietary (e. g. , Vocaltec) TCP TCP TCP or UDP typically UDP

Lập trình Socket Mục đích : Nghiên cứu cách để xây dựng một ứng

Lập trình Socket Mục đích : Nghiên cứu cách để xây dựng một ứng dụng client/server application mà giao tiếp bằng socket. Socket API F introduced in BSD 4. 1 UNIX, Tạo, sử dụng và huỷ bởi ứng dụng. F Sử dụng cho mô high client/server F Hai kiểu dịch vụ tần ứng dụng sử dụng socket API: – Truyền datagram không tin cậy – Tin cậy, hướng kết nối theo byte. socket a host-local, applicationcreated/owned, OS-controlled interface (a “door”) into which application process can both send and receive messages to/from another (remote or local) application process

Lập trình Socket TCP Socket: Là “cánh cửa” giữa tiến trình tầng ứng dụng

Lập trình Socket TCP Socket: Là “cánh cửa” giữa tiến trình tầng ứng dụng và giao thức giao vận end-end (UCP/TCP) TCP: là dịch vụ truyền tin cậy theo bytes từ tiến trình này đến tiến trình khác. Người phát triển điều khiển Điều khiển bởi hệ điều hành process socket TCP with buffers, variables host or server internet socket TCP with buffers, variables host or server Người phát triển điều khiển Điều khiển bởi hệ điều hành

Lập trình Socket TCP Client phải giao tiếp với server F Tiến trình trên

Lập trình Socket TCP Client phải giao tiếp với server F Tiến trình trên server phải đang chạy. F server phải tạo sẵn socket (door) để tiếp nhận yêu cầu của client. Client giao tiếp với server bắng cách: F Tạo client-local TCP socket F Xác định địa chỉ IP, số hiệu cổng của tiến trình trên server. F F Khi client tạo socket: client TCP thiết lập kết nối tới server TCP. Khi nhận được giao tiếp từ client, server TCP tạo socket mới cho tiến trình trên server truyền thông với client – Cho phép server có thể đáp ứng yêu cầu của nhiều client. Trên quan điểm ứng dụng TCP cung cấp dịch vụ truyền dữ liệu tin cậy theo bytes (kiểu đường ống) giữa Client và server

Lớp Inet. Address F Quản lý địa chỉ theo tên và số IP. –

Lớp Inet. Address F Quản lý địa chỉ theo tên và số IP. – static Inet. Address get. Local. Host(): trả về địa chỉ máy cục bộ – static Inet. Address get. By. Name(String host): nhận địa chỉ máy kiểu chuỗi, trả về đối tượng Inet. Address thay mặt cho địa chỉ máy này. – public String get. Host. Name(): trả về tên của đối tượng Inet. Address theo dạng String. – public byte[] get. Address(): trả về địa chỉ IP của đối tượng Inet. Address theo dạng mảng các byte. – public String get. Host. Address(): trả về địa chỉ IP của đối tượng Inet. Address theo dạng String.

Ví dụ: Chương trình lấy thông tin địa chỉ máy chủ import java. net.

Ví dụ: Chương trình lấy thông tin địa chỉ máy chủ import java. net. *; public class Addr. Lookup. App { public static void main(String[] args) { try { if (args. length!=1) { System. out. println("Usage: Java Addr. Lookup. App <Host. Name>"); return; } Inet. Address host = Inet. Address. get. By. Name(args[0]); String host. Name = host. get. Host. Name(); System. out. println("Host name: " + host. Name); System. out. println("IP Address: " + host. get. Host. Address()); } catch (Unknown. Host. Exception e) { System. out. print("Address not found"); return; } } }

Lớp Socket F Tạo kết nối từ máy khách tới máy chủ. – public

Lớp Socket F Tạo kết nối từ máy khách tới máy chủ. – public Socket(String host, int port): tạo một kết nối theo địa chỉ host và số cổng port. – public Socket(Inet. Address address, int port): tạo một kết nối theo địa chỉ là đối tượng Inet. Address và số cổng port. – public Socket(String host, int port, boolean stream): tạo một kết nối theo địa chỉ host và số cổng port, stream = true để quy định kết nối theo TCP, ngược lại, kết nối theo UDP (User Datagram Protocol).

Các phương thức hỗ trợ của lớp Socket – Input. Stream get. Input. Stream():

Các phương thức hỗ trợ của lớp Socket – Input. Stream get. Input. Stream(): Lấy về luồng nhập để nhận dữ liệu. – Output. Stream get. Output. Stream(): Lấy về luồng xuất để gửi dữ liệu. – int get. Port(): Lấy về số hiệu cổng kết nối của máy chủ. – synchronized void close(): Cắt đứt kết nối với máy chủ.

Lớp Server. Socket F Tạo kết nối từ máy chủ tới máy khách. –

Lớp Server. Socket F Tạo kết nối từ máy chủ tới máy khách. – public Server. Socket(int port): tạo một đối tượng lắng nghe những kết nối từ máy khách theo số cổng port. – Socket accept(): dừng lại chờ cho đến khi nhận được kết nối và trả về đối tượng Socket của máy khách. – synchronized void close(): Cắt đứt kết nối với máy khách.

Lập trình Socket TCP Ví dụ một ứng dụng client-server: F Client đọc một

Lập trình Socket TCP Ví dụ một ứng dụng client-server: F Client đọc một dòng kí tự từ input chuẩn (in. From. User stream) , gửi tới server qua socket (out. To. Server stream) F server đọc dòng kí tự trong sockets F server biến đổi dòng kí tự đó thành dòng kí tự chỉ gồm các chữ hoa và gửi trả về cho client. F client đọc, in ra dòng kí tự đã biến đổi từ socket (in. From. Server stream) Client process output stream: sequence of bytes out of process Input stream: sequence of bytes into process client TCP socket

Tương tác socket Client/server : TCP Server Client create socket, port=x, for incoming request:

Tương tác socket Client/server : TCP Server Client create socket, port=x, for incoming request: welcome. Socket = Server. Socket() TCP wait for incoming connection request connection. Socket = welcome. Socket. accept() read request from connection. Socket write reply to connection. Socket close connection. Socket setup create socket, connect to hostid, port=x client. Socket = Socket() send request using client. Socket read reply from client. Socket close client. Socket

Ví dụ về Java Server (TCP) import java. io. *; import java. net. *;

Ví dụ về Java Server (TCP) import java. io. *; import java. net. *; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modified. Sentence; Tạo input stream Tạo client socket, kết nối tới server Tạo output stream, đính kèm vàosocket Buffered. Reader in. From. User = new Buffered. Reader(new Input. Stream. Reader(System. in)); Socket client. Socket = new Socket("hostname", 6789); Data. Output. Stream out. To. Server = new Data. Output. Stream(client. Socket. get. Output. Stream());

Ví dụ về Java Server (TCP) Tạo input stream, đính kèm vào trong socket

Ví dụ về Java Server (TCP) Tạo input stream, đính kèm vào trong socket Buffered. Reader in. From. Server = new Buffered. Reader(new Input. Stream. Reader(client. Socket. get. Input. Stream())); sentence = in. From. User. read. Line(); Gửi dòng kí tự đến server Đọc dòng kí tự (đã biến đổi) gửi về từ server out. To. Server. write. Bytes(sentence + 'n'); modified. Sentence = in. From. Server. read. Line(); System. out. println("FROM SERVER: " + modified. Sentence); client. Socket. close(); } }

Ví dụ về Java Server (TCP) import java. io. *; import java. net. *;

Ví dụ về Java Server (TCP) import java. io. *; import java. net. *; class TCPServer { Tạo sẵn Socket ở cổng 6789 Đợi đến khi có socket từ client gửi đến Tạo input stream, đính kèm vào socket public static void main(String argv[]) throws Exception { String client. Sentence; String capitalized. Sentence; Server. Socket welcome. Socket = new Server. Socket(6789); while(true) { Socket connection. Socket = welcome. Socket. accept(); Buffered. Reader in. From. Client = new Buffered. Reader(new Input. Stream. Reader(connection. Socket. get. Input. Stream()));

Ví dụ về Java Server (TCP) Tạo output stream, đính kèm vào socket Data.

Ví dụ về Java Server (TCP) Tạo output stream, đính kèm vào socket Data. Output. Stream out. To. Client = new Data. Output. Stream(connection. Socket. get. Output. Stream()); Đọc dòng kí tự trong socket client. Sentence = in. From. Client. read. Line(); capitalized. Sentence = client. Sentence. to. Upper. Case() + 'n'; Ghi dòng kí tự đã biến đổi vào socket out. To. Client. write. Bytes(capitalized. Sentence); } } } Kết thúc vòng lặp while, quay trở về vòng lặp cha, đợi kết nối khác

Lập trình Socket UDP: không thiết lập kết nối giữa client và server F

Lập trình Socket UDP: không thiết lập kết nối giữa client và server F Không “bắt tay”. F Bên gửi phải xác định chính xác địa chỉ IP và cổng của bên nhận. Trên quan điểm ứng dụng F Server xác định địa chỉ IP và UDP cung cấp dịch vụ truyền dữ liệu cổng của bên gửi từ datagram không tin cậy theo byte (“datagrams”) giữa Client và Server nhận được. UDP : giao thức truyền dữ liệu chấp nhận không đúng thứ tự hay mất mát.

Tương tác socket Client/server : UDP Server create socket, port=x, for incoming request: server.

Tương tác socket Client/server : UDP Server create socket, port=x, for incoming request: server. Socket = Datagram. Socket() read request from server. Socket write reply to server. Socket specifying client host address, port umber Client create socket, client. Socket = Datagram. Socket() Create, address (hostid, port=x, send datagram request using client. Socket read reply from client. Socket close client. Socket

Ví dụ về Java client (UDP) Client process Input: receives packet (TCP received “byte

Ví dụ về Java client (UDP) Client process Input: receives packet (TCP received “byte stream”) Output: sends packet (TCP sent “byte stream”) client UDP socket

Ví dụ về Java client (UDP) import java. io. *; import java. net. *;

Ví dụ về Java client (UDP) import java. io. *; import java. net. *; class UDPClient { public static void main(String args[]) throws Exception { Tạo input stream Tạo client socket Chuyển hostname thành địa chỉ IP sử dụng DNS Buffered. Reader in. From. User = new Buffered. Reader(new Input. Stream. Reader(System. in)); Datagram. Socket client. Socket = new Datagram. Socket(); Inet. Address IPAddress = Inet. Address. get. By. Name("hostname"); byte[] send. Data = new byte[1024]; byte[] receive. Data = new byte[1024]; String sentence = in. From. User. read. Line(); send. Data = sentence. get. Bytes();

Ví dụ về Java client (UDP) Tạo datagram cùng với dữ liệu, độ dài,

Ví dụ về Java client (UDP) Tạo datagram cùng với dữ liệu, độ dài, địa chỉ IP, cổng Gửi datagram tới server Datagram. Packet send. Packet = new Datagram. Packet(send. Data, send. Data. length, IPAddress, 9876); client. Socket. send(send. Packet); Datagram. Packet receive. Packet = new Datagram. Packet(receive. Data, receive. Data. length); Đọc datagram gửi về từ server client. Socket. receive(receive. Packet); String modified. Sentence = new String(receive. Packet. get. Data()); System. out. println("FROM SERVER: " + modified. Sentence); client. Socket. close(); } }

Ví dụ về Java server (UDP) import java. io. *; import java. net. *;

Ví dụ về Java server (UDP) import java. io. *; import java. net. *; Tạo datagram socket ở cổng 9876 class UDPServer { public static void main(String args[]) throws Exception { Datagram. Socket server. Socket = new Datagram. Socket(9876); byte[] receive. Data = new byte[1024]; byte[] send. Data = new byte[1024]; while(true) { Tạo datagram nhận Nhận datagram Datagram. Packet receive. Packet = new Datagram. Packet(receive. Data, receive. Data. length); server. Socket. receive(receive. Packet);

Ví dụ về Java server (UDP) String sentence = new String(receive. Packet. get. Data());

Ví dụ về Java server (UDP) String sentence = new String(receive. Packet. get. Data()); Nhận địa chỉ IP, cổng của bên gửi Inet. Address IPAddress = receive. Packet. get. Address(); int port = receive. Packet. get. Port(); String capitalized. Sentence = sentence. to. Upper. Case(); send. Data = capitalized. Sentence. get. Bytes(); Tạo datagram để gửi tới client Datagram. Packet send. Packet = new Datagram. Packet(send. Data, send. Data. length, IPAddress, port); Đính datagram vào socket server. Socket. send(send. Packet); } } } Kết thúc vòng lặp while, Quay trở về vòng lặp cha, đợi datagram khác đến

Lập trình Socket: tham khảo C-language tutorial (audio/slides): F “Unix Network Programming” (J. Kurose),

Lập trình Socket: tham khảo C-language tutorial (audio/slides): F “Unix Network Programming” (J. Kurose), HTTP: //manic. cs. umass. edu/~amldemo/courseware/intro. Java-tutorials: F “All About Sockets” (Sun tutorial), HTTP: //www. javaworld. com/javaworld/jw-12 -1996/jw 12 -sockets. html F “Socket Programming in Java: a tutorial, ” HTTP: //www. javaworld. com/javaworld/jw-12 -1996/jw 12 -sockets. html

CHÚC CÁC ANH/CHỊ THÀNH CÔNG!

CHÚC CÁC ANH/CHỊ THÀNH CÔNG!