Tải bản đầy đủ (.ppt) (34 trang)

baBài giảng - giáo án: Bài giảng Java Chương 7 lập TRÌNH CLIENTSERVER

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.25 MB, 34 trang )

LẬP TRÌNH JAVA NC
Chương 07: LẬP TRÌNH
CLIENT/SERVER
Bộ môn: Lập trình máy tính
Nội dung của chương 07

Giao tiếp trên Internet

Dịch vụ Server và khái niệm cổng

Giao tiếp Client/Server và Socket

Các lớp cần thiết của gói thư viện java.net

Sử dụng TCP Socket

Xây dựng chương trình ở Client

Xây dựng chương trình ở Server
Tầng ứng dụng
Mục đích:

Đị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ụ (client-
server)


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

Các giao thức đặc biệt:

HTTP

ftp

SMTP

pop

dns

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 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
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
application
transport
network
data link
physical
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
chạy trên host.

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).

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.

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 : clien t và s er ver
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
Giao thức tầng ứng dụng
API: application
programming interface

Định ra giao diện giữa
tầng ứng dụng và tầng
mạng.

Socket : Internet API

Hai tiến trình truyền
thông bằng cách
gửi/đọc dữ liệu vào/từ
socket.
Q: Phân biệt các tiến trình
bằng cách nào?

Địa chỉ IP của host.

“Số hiệu cổng”: cho
phép bên host nhận
phân biết các tiến
trình cục bộ.
Dịch vụ Cổng
FPT 21
HTTP 80
Telnet 23

Finger 79
SMTP 25
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)

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.
Thời gian(Timing)

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)

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ả.

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
Application
file transfer
e-mail
Web documents
real-time audio/video
stored audio/video
interactive games
financial apps
Data loss
no loss
no loss
loss-tolerant
loss-tolerant
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
Dị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
và server.

Truyền dữ liệu tin cậy giữa
tiến trình gửi và nhận

Điều tiết luồng : bên gửi sẽ
không làm “lụt” bên nhận.

Điều tiết tắc nghẽn: điều
chỉnh tốc độ gửi khi mạng
quá tải.

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?
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
SMTP [RFC 821]
telnet [RFC 854]
HTTP [RFC 2068]
ftp [RFC 959]
proprietary
(e.g. RealNetworks)
NSF
proprietary
(e.g., Vocaltec)

Underlying
transport protocol
TCP
TCP
TCP
TCP
TCP or UDP
TCP or UDP
typically UDP
Lập trình Socket
Socket API

introduced in BSD4.1 UNIX, Tạo,
sử dụng và huỷ bởi ứng dụng.

Sử dụng cho mô high client/server

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.
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
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.
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.
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
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
Lậ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
server.

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 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.
Ví 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());
} catch (UnknownHostException e) {
System.out.print("Address not found");
return;}
}
}
Lớ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
InetAddress 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

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ủ.
Lớ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.
Lậ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
(outToServer stream)

server đọc dòng kí tự trong
sockets

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.

client đọc,in ra dòng kí tự đã biến
đổi từ socket (inFromServer
stream)
outToServer
to network from network
inFromServer
inFromUser
keyboard monitor
Process
clientSocket
input
stream
input

stream
output
stream
TCP
socket
Input stream:
sequence of bytes
into process
output stream:
sequence of bytes
out of process
Client
process
client TCP
socket
Tương tác socket Client/server :
TCP
wait for incoming
connection request
connectionSocket =
welcomeSocket.accept()
create socket,
port=x, for
incoming request:
welcomeSocket =
ServerSocket()
create socket,
connect to hostid, port=x
clientSocket =
Socket()

close
connectionSocket
read reply from
clientSocket
close
clientSocket
Server
Client
send request using
clientSocket
read request from
connectionSocket
write reply to
connectionSocket
TCP
connection setup
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 modifiedSentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream 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
Ví dụ về Java Server (TCP)
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();

}
}
Tạo input stream,
đính kèm vào trong
socket
Gửi dòng kí tự
đến server
Đọc dòng kí tự
(đã biến đổi) gửi
về từ server
Ví dụ về Java Server (TCP)
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception

{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);

while(true) {

Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));

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
Ví 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

×