M ô hình Client-ServerĐặc trưng cho ứng dụng gồm hai thành phần : client và server application transport network data link physical application transport network data link physical Clie
Trang 2Nội dung của chương 07
Giao tiếp trên Internet
Giao tiếp Client/Server và Socket
Các lớp cần thiết của gói thư viện java.net
Trang 3– SMTP – pop – dns
Lập trình các ứng dụng mạng
socket API
Trang 4– e.g., email, ftp, Web
application
transport network data link physical
application
transport network data link physical
Trang 5Mộ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.
tiến trình có thể truyền
thông với nhau qua
interprocess
khiển bởi hệ điều hành).
các host khác nhau truyền
thông qua giao thức tầng
ứng dụng.
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
Trang 6M ô hình Client-Server
Đặc trưng cho ứng dụng gồm hai
thành phần : client và server application
transport network data link physical
application
transport network data link physical
Client:
Khởi tạo giao tiếp với server
(“speaks first”)
Yêu cầu dịch vụ từ server.
Web : client nhận và hiển thị web
page ; e-mail: các trình đọc thư.
Server:
Cung cấp những dịch vụ được
yêu cầu từ Client
e.g., Web server gửi Web page,
Mail server phân phát e-mail
request
reply
Trang 7 Socket : Internet API
– Hai tiến trình truyền
Trang 8Cá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)
Một số ứng dụng(e.g., audio) có
thể chấp nhận một số mất mát.
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.
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.
Trang 9Các yêu cầu cho một số ứng dụng
Application
file transfer
e-mail Web documents
loss-tolerant loss-tolerant
no loss
Bandwidth
elastic elastic elastic audio: 5Kb-1Mb video:10Kb-5Mb same as above few Kbps up elastic
Time Sensitive
no no no yes, 100’s msec
yes, few secs yes, 100’s msec yes and no
Trang 10Dịch vụ của các giao thức giao vận trên
Internet
Dịch vụ TCP:
Hướng kết nối : Yêu cầu
thiết lập kết nối giữa client
Không hỗ trợ : thời gian,
băng thông tối thiểu.
Dịch vụ UDP:
Truyền dữ liệu không tin cậy giữa các tiến trình gửi và nhận.
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?
Trang 11Cá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
proprietary (e.g., Vocaltec)
Underlying transport protocol
TCP TCP TCP TCP TCP or UDP
TCP or UDP typically UDP
Trang 12– Truyền datagram không tin cậy
– Tin cậy, hướng kết nối theo
byte.
a host-local ,
application-created/owned ,
OS-controlled interface (a “door”) into which application process can
both send and receive messages to/from another (remote or
local) application process
socket
client/server application mà giao tiếp bằng socket.
Trang 13Lậ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.
process
TCP with buffers, variables
process
TCP with buffers, variables
socket
Người phát triển điều khiển
Điều khiển bởi
hệ điều hành
host or server internet
Trang 14Lập trình Socket TCP
Client phải giao tiếp với server
Tiến trình trên server phải
đang chạy.
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:
Tạo client-local TCP socket
Xác định địa chỉ IP,số hiệu
cổng của tiến trình trên
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
Trang 15Lớp InetAddress
Quản lý địa chỉ theo tên và số IP.
– static InetAddress getLocalHost(): trả về địa chỉ máy cục bộ
– static InetAddress getByName(String host): nhận
địa chỉ máy kiểu chuỗi, trả về đối tượng InetAddress thay mặt cho địa chỉ máy này.
– public String getHostName(): trả về tên của đối
tượng InetAddress theo dạng String.
– public byte[] getAddress(): trả về địa chỉ IP của đối tượng InetAddress theo dạng mảng các byte.
– public String getHostAddress(): trả về địa chỉ IP của đối tượng InetAddress theo dạng String.
Trang 16Ví dụ: Chương trình lấy thông tin địa chỉ máy chủ
import java.net.*;
public class AddrLookupApp {
public static void main(String[] args) {
try {
if (args.length!=1) {
System.out.println("Usage: Java AddrLookupApp <HostName>"); return;}
InetAddress host = InetAddress.getByName(args[0]);
String hostName = host.getHostName();
System.out.println("Host name:" + hostName);
System.out.println("IP Address:" + host.getHostAddress());
Trang 17Lớp Socket
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(InetAddress address, int port): tạo một kết nối theo địa chỉ là đối tượng
Trang 18Các phương thức hỗ trợ
của lớp Socket
– InputStream getInputStream(): Lấy về luồng nhập để nhận dữ liệu.
– OutputStream getOutputStream(): Lấy về
luồng xuất để gửi dữ liệu.
– int getPort(): 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ủ.
Trang 19Lớp ServerSocket
Tạo kết nối từ máy chủ tới máy khách.
– public ServerSocket(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.
Trang 20Lập trình Socket TCP
Ví dụ một ứng dụng client-server:
Client đọc một dòng kí tự từ input
chuẩn (inFromUser stream) , gửi
tới server qua socket
hoa và gửi trả về cho client.
client đọc,in ra dòng kí tự đã biến
đổi từ socket (inFromServer
input stream
output stream
TCP socket
Input stream: sequence of bytesinto process
output stream:
sequence of bytes out of process
Client process
client TCP socket
Trang 21Tương tác socket Client/server :
Trang 22DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
Tạo input stream
Tạo client socket,
kết nối tới server
Tạo output stream,
đính kèm vàosocket
Trang 23Ví dụ về Java Server (TCP)
BufferedReader inFromServer = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine();
(đã biến đổi) gửi
về từ server
Trang 24Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
Trang 25Ví dụ về Java Server (TCP)
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
} } }
Đọc dòng kí tự
trong socket
Tạo output stream, đính kèm vào
socket
Ghi dòng kí tự đã
biến đổi vào socket
Kết thúc vòng lặp while, quay trở về vòng lặp cha, đợi kết nối khác
Trang 26Lập trình Socket UDP
UDP: không thiết lập kết nối
giữa client và server
Trên quan điểm ứng dụng
UDP cung cấp dịch vụ truyền dữ liệu không tin cậy theo byte (“datagrams”)
giữa Client và Server
Trang 27Tương tác socket Client/server : UDP
Client
Create, address (hostid, port=x,
send datagram request using clientSocket
create socket,
port=x, for
incoming request:
serverSocket = DatagramSocket()
read request from
serverSocket
write reply to
serverSocket
specifying client host address, port umber
Trang 28Ví dụ về Java client (UDP)
input stream
UDP packet
UDP socket
Client process
client UDP socket
Trang 29Ví dụ về Java client (UDP)
import java.io.*;
import java.net.*;
class UDPClient { public static void main(String args[]) throws Exception {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
Tạo input stream
Tạo client socket
Chuyển hostname
thành địa chỉ IP
sử dụng DNS
Trang 30Ví dụ về Java client (UDP)
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
} }
gửi về từ server
Trang 31Ví dụ về Java server (UDP)
import java.io.*;
import java.net.*;
class UDPServer { public static void main(String args[]) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket);
Tạo datagram socket
ở cổng 9876
Tạo datagram nhận
Nhận datagram
Trang 32Ví dụ về Java server (UDP)
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
} } }
gửi tới client
Trang 33Lập trình Socket: tham khảo
C-language tutorial (audio/slides):
“Unix Network Programming” (J Kurose),
HTTP://manic.cs.umass.edu/~amldemo/courseware/intro.
Java-tutorials:
“All About Sockets” (Sun tutorial),
12-sockets.html
HTTP://www.javaworld.com/javaworld/jw-12-1996/jw- “Socket Programming in Java: a tutorial,”
12-sockets.html
Trang 34HTTP://www.javaworld.com/javaworld/jw-12-1996/jw-CHÚC CÁC ANH/CHỊ
THÀNH CÔNG!