Xem mẫu
- Chương 5
L p trình socket
- N I DUNG
• T ng quan
• L p trình Socket v i TCP
• L p trình Socket v i UDP
- T ng quan application
transport
network
data link
Vi t chương trình physical
– Ch y trên các h th ng u
cu i
– Truy n thông qua m ng
– Ví d web server giao ti p
v i browser
Vi t chương trình trên các application
transport
thi t b m ng ngoài ph m network
data link
application
physical
vi này transport
network
data link
physical
- L p trình socket
M c tiêu: bi t cách xây d ng m t ng d ng
client/server giao ti p b ng socket
Socket API socket
• ư c gi i thi u trong BSD4.1 M t giao ti p c c b
UNIX, 1981
trên host, ư c t o
• ư c kh i t o, s d ng và h y
b i ng d ng và ư c
m t cách tư ng minh b i ng
i u khi n b i h
d ng
i u hành, qua ó quá
• Mô hình client/server
trình ng d ng có th
• Hai lo i d ch v truy n t i qua
truy n (hay nh n) n
socket API:
(hay t ) quá trình
– Datagram không b o m
khác
– connection-oriented b o
m
- Giao ti p gi a các quá trình trên hai host
khác nhau
• process truy n/nh n host hay
host hay
server
server
thông i p n/t socket
c a nó Ki m soát b i
ngư i l p trình
• socket tương t như c a process
process
ra vào socket
socket
– Quá trình truy n thông TCP v i
TCP v i
Internet
i p ra c a Buffer và
Buffer và
các bi n
các bi n
– Quá trình truy n d a vào
h t ng truy n t i trên
phía kia c a cánh c a, Ki m soát b i
h i u hành
thông tin ư c chuy n n
socket c a quá trình thu
• API: (1) ch n giao th c truy n t i ; (2) kh năng s a m t vài
thông s
- N I DUNG
• T ng quan
• L p trình Socket v i TCP
• L p trình Socket v i UDP
- L p trình socket v i TCP
Socket: Như là c a thông gi a các quá trình ng
d ng và giao th c truy n t i end-to-end (UCP hay
TCP)
TCP service: truy n t i b o m cho các byte t m t
process n m t process khác
ư c ki m soát b i
ư c ki m soát b i process
process ngư i l p trình
ngư i l p trình
ng d ng
socket
ng d ng
socket
TCP v i
TCP v i ư c ki m soát b i
ư c ki m soát b i Buffer và Buffer và h i u hành
internet
h i u hành các bi n các bi n
host hay
host hay
server
server
- L p trình socket v i TCP
Client ph i liên l c v i server • Khi ư c liên h b i client,
server TCP t o socket m i
• Trư c h t quá trình trên
quá trình server giao ti p
server ph i ch y
v i client
• server ph i t o socket
– Cho phép server giao ti p
ón ti p client
v i nhi u quá trình client
Client liên l c server b ng:
– Các ch s port ư c dùng
• T o TCP socket
phân bi t các client
• Ch ra IP address, port
number c a quá trình trên
server T góc ng d ng
• Khi client t o socket: client
TCP cung c p d ch v truy n t i có
TCP thi t l p k t n i n
tr t t và b o m gi a client và
server TCP
server
- Tương tác gi a client socket và server
socket qua TCP
Server Client
T o socket,
port=x, ón yêu c u:
welcomeSocket =
ServerSocket()
TCP T o socket,
i yêu c u
Thi tl pk tn i connect to hostid, port=x
k tn i n
clientSocket =
connectionSocket =
Socket()
welcomeSocket.accept()
G i yêu c u dùng
c yêu c u t clientSocket
connectionSocket
Ghi ph n h i ra
connectionSocket c ph n h i t
clientSocket
close
close
connectionSocket
clientSocket
- Thu t ng Stream
keyboard monitor
• Stream là m t tu n t
các ký t i vào hay i ra
inFromUser
input
m t quá trình. stream
Client
Process
• M t input stream ư c process
k t v i m t ngu n nh p
c a quá trình, ví d bàn
phím hay socket.
inFromServer
outToServer
• M t output stream ư c output input
stream stream
k t v i m t ích n c a
quá trình, ví d màn hình client TCP
clientSocket
socket
hay socket. TCP
socket
to network from network
- Ví d ng d ng client-server
1) client c dòng ký t t u vào chu n
(inFromUser stream), r i g i n server
qua socket (outToServer stream)
2) server c dòng ký t t socket
3) server i các dòng ký t thành ch hoa, g i
ngư c l i cho client
4) client c và in dòng ký t t socket
(inFromServer stream)
- 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;
To
BufferedReader inFromUser =
input stream
new BufferedReader(new InputStreamReader(System.in));
To
client socket, Socket clientSocket = new Socket("hostname", 6789);
k t n i n server
DataOutputStream outToServer =
To
new DataOutputStream(clientSocket.getOutputStream());
output stream
g n vào socket
- Ví d : Java client (TCP) (ti p theo).
To BufferedReader inFromServer =
input stream new BufferedReader(new
g n vào socket InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
G i dòng ký
outToServer.writeBytes(sentence + '\n');
t n server
modifiedSentence = inFromServer.readLine();
c dòng ký
t t server
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
- 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;
To
welcoming socket
ServerSocket welcomeSocket = new ServerSocket(6789);
T i port 6789
while(true) {
i client liên h Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
T o input stream,
InputStreamReader(connectionSocket.getInputStream()));
g n vàosocket
- Ví d : Java server (TCP) (ti p theo)
T o output stream,
DataOutputStream outToClient =
g n vào socket
new DataOutputStream(connectionSocket.getOutputStream());
c dòng ký
clientSentence = inFromClient.readLine();
t t socket
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Ghi dòng
outToClient.writeBytes(capitalizedSentence);
ký t ra socket
}
}
}
K t thúc vòng l p while,
tr l i ch k t n i khác t client
- N I DUNG
• T ng quan
• L p trình Socket v i TCP
• L p trình Socket v i UDP
- L p trình socket v i UDP
UDP: không có k t n i gi a
client và server
• Không b t tay
T góc ng d ng
• sender g n a ch IP và
UDP cung c p d ch v
port c a ích vào m i
truy n t i không b o m
gói gi a client và server
• server ph i tách a ch
IP và port c a client t
gói nh n ư c
UDP: data có th không
úng th t máy thu
hay m t
- Tương tác gi a client socket và server
socket qua UDP
Server Client
T o socket,
T o socket,
clientSocket =
port= x.
DatagramSocket()
serverSocket =
DatagramSocket()
T o datagram v i server IP và
port=x; g i datagram qua
clientSocket
c datagram t
serverSocket
Ghi ph n h i ra
serverSocket
c datagram t
ch ra
clientSocket
client address,
port number close
clientSocket
- Ví d : Java client (UDP)
keyboard monitor
inFromUser
input
stream
Client
Process
Input: nh n packet
process
Output: truy n
packet (TCP g i
receivePacket
sendPacket
dòng byte) UDP UDP
packet packet
client UDP
clientSocket
socket UDP
socket
to network from network
- Ví d : Java client (UDP)
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
To
input stream BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
To
client socket DatagramSocket clientSocket = new DatagramSocket();
Thông d ch
InetAddress IPAddress = InetAddress.getByName("hostname");
hostname sang IP
address dùng DNS byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
nguon tai.lieu . vn