Bài giảng Mạng máy tính - Chương 7: Tầng ứng dụng - Phần 1: Lập trình Socket-Java - Ngô Hồng Sơn

Lꢀp trình socket  
M
ꢂc  
ñ
ích: làm th  
ꢆ
nào ñꢇ xây dꢈng các ꢁng dꢂng  
client/server truy  
ꢅ
n d li u qua socket  
ꢉ ꢊ  
Socket API  
socket  
❒
ðưa ra trong BSD4.1 UNIX,  
1981  
Là giao diꢀn (cꢁa) do  
ng t o ra trên máy  
m, qu n lý b i OS qua  
ứ
ng  
❒
Cho phép ꢁng dꢂng tꢃo ra và  
sꢄ dꢂng socket  
d
ụ
ạ
ạ
ả
tr  
ớ
❒
❒
Nguyên lý client/server  
ñó các ꢂng dꢃng có thꢄ gꢁi  
và nhꢅn thông ñiꢀp ñꢆn/tꢇ  
các ꢂng dꢃng khác  
Có hai dꢃng socket  
ꢀ Truyꢅn gói tin, không tin  
cꢀy  
ꢀ Truyꢅn dòng bytes, tin cꢀy  
1
Lꢀp trình socket vꢋiTCP  
Socket: c  
giao v  
ch v TCP: truy  
ñꢆn các ti n trình khác  
ꢄ
ꢀ
a giao ti  
n (UCP ho  
n các bytes tin c  
ꢆ
p gi  
ꢉa các tiꢆn trình và giao thꢁc  
ꢌc TCP)  
D
ꢍ
ꢂ
ꢅ
ꢀy t  
ꢎ
mꢏt tiꢆn trình  
ꢆ
ðiꢊu khiꢄn bꢈi  
Lꢅp trình viên  
Tiꢆn trình  
ðiꢊu khiꢄn bꢈi  
Lꢅp trình viên  
Tiꢆn trình  
socket  
socket  
TCP vꢈi  
Bꢉ ñꢀm,  
Các biꢆn  
TCP vꢈi  
ðiꢊu khiꢄn bꢋi  
Hꢀ ñiꢊu hành  
ðiꢊu khiꢄn bꢋi  
Hꢀ ñiꢊu hành  
Bꢉ ñꢀm,  
Các biꢆn  
internet  
Máy trꢌm,  
máy chꢍ  
Máy trꢌm,  
máy chꢍ  
2
Lꢀp trình socket vꢋi TCP  
Client phꢐi gꢄi yêu cꢑu tꢋi server  
❒
khi ñưꢓc client liên lꢃc, server  
TCP tꢃo socket mꢋi ñꢇ tiꢆn  
trình máy chꢒ giao tiꢆp vꢋi  
client  
❒
Tiꢆn trình máy chꢒ phꢐi ñang  
ñưꢓc thꢈc hiꢊn  
❒
máy chꢒ phꢐi mꢔ socket  
(cꢕng) ñꢇ nhꢀn yêu cꢑu tꢎ  
client  
ꢀ cho phép nói chuyꢊn vꢋi  
nhiꢅu clients  
ꢀ phân biꢊt client bꢖng sꢘ  
hiꢊu cꢕng (chương 3…)  
Client yêu cꢑu server bꢖng cách:  
❒
❒
Tꢃo mꢏt socket TCP trên máy  
Chꢗ rõ IP address & port  
number cꢒa tiꢆn trình máy chꢒ  
ðꢎi vꢈi ꢂng dꢃng  
❒
Khi client tꢃo socket: client  
TCP tꢃo liên kꢆt tꢋi server  
TCP  
TCP cung c  
bytes tin c  
gi a client và server  
ấ
p d  
ị
ậ
ch v  
ụ
truy n dòng  
ề
y và có th  
ứ ự  
t
ữ
3
Tương tác giꢉa client/server qua socket  
TCP  
Server  
(máy hostid)  
Client  
tꢃo socket,  
port=x, cho yêu cꢑu tꢋi:  
welcomeSocket =  
ServerSocket()  
Tꢌo liên kꢆt  
tꢃo socket,  
chꢙ yêu cꢑu tꢋi  
kꢆt nꢘi tꢋi hostid, port=x  
clientSocket =  
Socket()  
TCP  
connectionSocket =  
welcomeSocket.accept()  
gꢄi yêu cꢑu tꢎ  
clientSocket  
nhꢀn yêu cꢑu tꢎ  
connectionSocket  
trꢐ lꢙi tꢃi  
connectionSocket  
ñꢚc trꢐ lꢙi tꢃi  
clientSocket  
ñóng socket  
connectionSocket  
ñóng  
clientSocket  
4
Stream  
keyboard  
monitor  
❒
stream mꢏt chuꢛi ký tꢈ  
vào/ra mꢏt tiꢆn trình.  
input  
stream  
❒
❒
input stream ñưꢓc gꢜn vꢋi  
mꢏt nguꢝn vào, e.g. bàn  
phím, socket  
Client  
process  
output stream ñưꢓc gꢜn vꢋi  
mꢏt nguꢝn ra, e.g., màn hình  
socket.  
output  
stream  
input  
stream  
client TCP  
socket  
TCP  
socket  
to network  
from network  
5
Lꢀp trình socket vꢋi TCP  
Ví dꢂ vꢅ ꢁng dꢂng client-server:  
1) client ñꢚc các dòng văn bꢐn do ngưꢙi dùng gõ tꢎ  
bàn phím (inFromUserstream) , g  
ꢄ
i t  
ꢋi server  
qua socket (outToServerstream)  
2) server ñꢚc các dòng g  
ꢄ ꢎ socket  
i t  
3) server chuy  
client  
ꢇ
n sang ch  
ꢉ
hoa và gꢄi trꢐ lꢃi cho  
4) client ñꢚc và in lꢃi dòng văn bꢐn nhꢀn ñưꢓc tꢎ  
socket (inFromServerstream)  
6
Ví dꢂ: Java client (TCP)  
import java.io.*;  
import java.net.*;  
class TCPClient {  
public static void main(String argv[]) throws Exception  
{
String sentence;  
String modifiedSentence;  
Tꢌo  
input stream  
BufferedReader inFromUser =  
new BufferedReader(new InputStreamReader(System.in));  
Tꢌo  
client socket,  
nꢎi tꢈi server  
Tꢌo  
output stream  
nꢎi tꢈi socket  
Socket clientSocket = new Socket("hostname", 6789);  
DataOutputStream outToServer =  
new DataOutputStream(clientSocket.getOutputStream());  
7
Ví dꢂ: Java client (TCP), cont.  
tꢌo  
input stream  
nꢎi tꢈi socket  
BufferedReader inFromServer =  
new BufferedReader(new  
InputStreamReader(clientSocket.getInputStream()));  
sentence = inFromUser.readLine();  
Gꢁi tꢈi  
outToServer.writeBytes(sentence + '\n');  
modifiedSentence = inFromServer.readLine();  
System.out.println("FROM SERVER: " + modifiedSentence);  
clientSocket.close();  
server  
ñꢏc tin tꢇ  
server  
}
}
8
Ví dꢂ: Java server (TCP)  
import java.io.*;  
import java.net.*;  
class TCPServer {  
public static void main(String argv[]) throws Exception  
{
String clientSentence;  
String capitalizedSentence;  
Tꢌo socket  
chꢐ tꢌi port 6789  
ServerSocket welcomeSocket = new ServerSocket(6789);  
while(true) {  
chꢐ yêu cꢑu  
tꢇ client  
Socket connectionSocket = welcomeSocket.accept();  
BufferedReader inFromClient =  
new BufferedReader(new  
InputStreamReader(connectionSocket.getInputStream()));  
tꢌo input stream,  
nꢎi tꢈi socket  
9
Ví dꢂ: Java server (TCP), cont  
tꢌo output  
stream  
nꢎi tꢈi socket  
DataOutputStream outToClient =  
new DataOutputStream(connectionSocket.getOutputStream());  
ñꢏc thông tin  
clientSentence = inFromClient.readLine();  
tꢇ socket  
capitalizedSentence = clientSentence.toUpperCase() + '\n';  
outToClient.writeBytes(capitalizedSentence);  
ghi ra socket  
}
}
}
kꢆt thúc while loop  
và chꢐ yêu cꢑu tꢇ client khác  
10  
Chương 2: Tꢑng ꢁng dꢂng  
❒
2.6. L  
TCP  
ꢀ
p trình socket v  
ꢋ
i
i
❒
2.1 Nguyên lý c  
ꢒa các  
ꢁ
ng d ng m ng  
ꢂ
ꢃ
❒
2.7. L  
UDP  
ꢀp trình socket v  
ꢋ
❒
❒
2.2 Web và HTTP  
2.3 FTP – File Transfer  
Protocol  
❒
❒
2.4 Electronic Mail  
ꢀ SMTP, POP3, IMAP  
2.5 DNS  
11  
Lꢀp trình socket vꢋi UDP  
UDP: không có liên kꢆt giꢉa  
client và  
❒
❒
không có giai ñoꢃn bꢜt tay  
bên gꢄi chꢗ rõ IP address và  
port number cꢒa phía nhꢀn  
trên mꢛi gói tin  
ðꢎi vꢈi ꢂng dꢃng  
UDP cung c p d ch v  
ấ
ị
ụ
truy  
ề
a
n dữ  
li u không tin c  
ệ
ậy gi  
ữ
❒
server sꢞ tìm ñꢍa chꢗ IP và sꢘ  
hiꢊu cꢕng tương ꢁng bên  
trong gói tin  
client và server  
UDP: các gói tin có thꢇ bꢍ mꢟt  
hoꢌc ñꢆn không theo thꢁ tꢈ  
12  
Tương tác client/server qua UDP socket  
Server (máy hostid)  
Client  
tꢃo socket,  
tꢃo socket,  
clientSocket =  
DatagramSocket()  
port=x, cho các y/c ñꢆn:  
serverSocket =  
DatagramSocket()  
tꢃo gói tin, ñ/c (hostid, port=x,  
gꢄi gói tin tꢎ clientSocket  
ñꢚc y/c tꢎ  
serverSocket  
ghi trꢐ lꢙi lên  
serverSocket  
chꢗ rõ ñ/c, cꢕng  
cꢒa client  
ñꢚc trꢐ lꢙi tꢃi  
clientSocket  
ñóng  
clientSocket  
13  
Ví dꢂ: Java client (UDP)  
keyboard  
monitor  
input  
stream  
Client  
process  
Input: ñꢏc gói tin  
nhꢒc lꢌi: TCP gꢁi  
“byte stream”)  
(
Output: gꢁi gói tin  
(nhꢒc lꢌi: TCP gꢁi  
“byte stream”)  
UDP  
packet  
UDP  
packet  
client UDP  
UDP  
socket  
socket  
to network  
from network  
14  
Ví dꢂ: Java client (UDP)  
import java.io.*;  
import java.net.*;  
class UDPClient {  
public static void main(String args[]) throws Exception  
{
Tꢌo  
input stream  
BufferedReader inFromUser =  
new BufferedReader(new InputStreamReader(System.in));  
Tꢌo  
client socket  
DatagramSocket clientSocket = new DatagramSocket();  
chuyꢄn ñꢓi  
hostname ꢀ>IP  
sꢁ dꢃng DNS  
InetAddress IPAddress = InetAddress.getByName("hostname");  
byte[] sendData = new byte[1024];  
byte[] receiveData = new byte[1024];  
String sentence = inFromUser.readLine();  
sendData = sentence.getBytes();  
15  
Ví dꢂ: Java client (UDP), cont.  
Tꢌo datagram vꢈi  
dataꢀtoꢀsend,  
DatagramPacket sendPacket =  
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);  
length, IP addr, port  
clientSocket.send(sendPacket);  
Gꢁi datagram  
tꢈi server  
DatagramPacket receivePacket =  
new DatagramPacket(receiveData, receiveData.length);  
ñꢏc datagram  
tꢇ server  
clientSocket.receive(receivePacket);  
String modifiedSentence =  
new String(receivePacket.getData());  
System.out.println("FROM SERVER:" + modifiedSentence);  
clientSocket.close();  
}
}
16  
Ví dꢂ: Java server (UDP)  
import java.io.*;  
import java.net.*;  
class UDPServer {  
public static void main(String args[]) throws Exception  
{
Tꢌo  
datagram socket  
tꢌi cꢓng 9876  
DatagramSocket serverSocket = new DatagramSocket(9876);  
byte[] receiveData = new byte[1024];  
byte[] sendData = new byte[1024];  
while(true)  
{
Tꢌo vùng ñꢀm  
nhꢅn datagram  
DatagramPacket receivePacket =  
new DatagramPacket(receiveData, receiveData.length);  
serverSocket.receive(receivePacket);  
Nhꢅn  
datagram  
17  
Ví dꢂ: Java server (UDP), cont  
String sentence = new String(receivePacket.getData());  
Lꢔy IP addr  
InetAddress IPAddress = receivePacket.getAddress();  
port # cꢍa ngưꢐi  
gꢁi  
int port = receivePacket.getPort();  
String capitalizedSentence = sentence.toUpperCase();  
sendData = capitalizedSentence.getBytes();  
Tꢌo datagram  
DatagramPacket sendPacket =  
ñꢄ gꢁi tꢈi client  
new DatagramPacket(sendData, sendData.length, IPAddress,  
port);  
Ghi  
datagram  
serverSocket.send(sendPacket);  
ra socket  
}
}
}
Kꢆt thúc vòng while,  
chꢐ datagram khác  
18  
pdf 18 trang baolam 20580 Free
Bạn đang xem tài liệu "Bài giảng Mạng máy tính - Chương 7: Tầng ứng dụng - Phần 1: Lập trình Socket-Java - Ngô Hồng Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_mang_may_tinh_chuong_7_tang_ung_dung_phan_2_ngo_ho.pdf