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
❒ ðưa ra trong BSD4.1 UNIX,
1981
❒ Cho phép ứng dụng tạo ra và
sử dụng socket
❒ Nguyên lý client/server
❒ Có hai dạng socket
Truyền gói tin, không tin
cậy
Truyền dòng bytes, tin cậy
18 trang |
Chia sẻ: phuongt97 | Lượt xem: 475 | Lượt tải: 0
Nội dung tài liệu Bài giảng Lập trình socket, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trê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
❒ Cho phép ng d ng t o ra và Là giao di n (c a) do ứng
s d ng socket dụng tạo ra trên máy
tr ạm, qu ản lý bới OS qua
❒ Nguyên lý client/server
ñó các ng d ng có th g i
❒
Có hai d ng socket và nh n thông ñi p ñ n/t
Truy n gói tin, không tin các ng d ng khác
c y
Truy n dòng bytes, tin c y
1
L p trình socket v iTCP
Socket: c a giao ti p gi a các ti n trình và giao th c
giao v n (UCP ho c TCP)
D ch v TCP: truy n các bytes tin c y t m t ti n trình
ñ n các ti n trình khác
ði u khi n b i Ti n trình ði u khi n b i
Ti n trình
L p trình viên L p trình viên
socket socket
TCP v i
TCP v i
ði u khi n b i
ði u khi n b i B ñ m,
H ñi u hành B ñ m, internet H ñi u hành
Các bi n Các bi n
Máy tr m,
Máy tr m,
máy ch
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
❒ Ti n trình máy ch ph i ñang TCP t o socket m i ñ ti n
ñư c th c hi n trình máy ch giao ti p v i
❒ máy ch ph i m socket client
(c ng) ñ nh n yêu c u t cho phép nói chuy n v i
client nhi u clients
Client yêu c u server b ng cách: phân bi t client b ng s
hi u c ng (ch ươ ng 3)
❒ 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 cung cấp dịch vụ truy ền dòng
TCP t o liên k t t i server
bytes tin cậy và có th ứ tự
TCP
gi ữa client và server
3
Tươ ng tác gi a client/server qua socket
TCP
Server Client
(máy hostid )
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 TCP k t n i t i hostid , port= x
connectionSocket = clientSocket =
welcomeSocket.accept() Socket()
g i yêu c u t
nh n yêu c u t clientSocket
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
input stream ñư c g n v i stream
m t ngu n vào, e.g. bàn Client inFromUser
Process
phím, socket process
❒ output stream ñư c g n v i
m t ngu n ra, e.g., màn hình
socket.
output input
stream stream
outToServer
inFromServer
clientclientSocket 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 (inFromUser stream) , g i t i server
qua socket ( outToServer stream)
2) server ñ c các dòng g i t socket
3) server chuy n sang ch hoa và g i tr l i cho
client
4) client ñ c và in l i dòng văn b n nh n ñư c t
socket ( inFromServer stream)
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
BufferedReader inFromUser =
input stream
new BufferedReader(new InputStreamReader(System.in));
T o
client socket, Socket clientSocket = new Socket("hostname", 6789);
n i t i server
T o DataOutputStream outToServer =
output stream new DataOutputStream(clientSocket.getOutputStream());
n i t i socket
7
Ví d : Java client (TCP), cont.
t o BufferedReader inFromServer =
input stream new BufferedReader(new
n i t i socket InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
G i t i
server outToServer.writeBytes(sentence + '\n');
ñ c tin t modifiedSentence = inFromServer.readLine();
server
System.out.println ("FROM SERVER: " + modifiedSentence );
clientSocket.close();
}
}
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 =
t o input stream, new BufferedReader(new
n i t i socket InputStreamReader(connectionSocket.getInputStream()));
9
Ví d : Java server (TCP), cont
t o output
stream DataOutputStream outToClient =
n i t i socket new DataOutputStream (connectionSocket.getOutputStream());
ñ c thông tin
clientSentence = inFromClient.readLine();
t socket
capitalizedSentence = clientSentence.toUpperCase() + '\n';
ghi ra socket outToClient.writeBytes(capitalizedSentence);
}
}
}
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.1 Nguyên lý c a các ❒ 2.6. L p trình socket v i
ng d ng m ng TCP
❒ 2.2 Web và HTTP ❒ 2.7. L p trình socket v i
❒ 2.3 FTP – File Transfer UDP
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à ð i v i ng d ng
port number c a phía nh n
ấ ị ụ ề ữ
trên m i gói tin UDP cung c p d ch v truy n d
li ệu không tin cậy gi ữa
❒ server s tìm ñ a ch IP và s
client và server
hi u c ng tươ ng ng bên
trong gói tin
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,
port= x, cho các y/c ñ n: clientSocket =
DatagramSocket()
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 ñ c tr l i t i
ch rõ ñ/c, c ng clientSocket
c a client
ñóng
clientSocket
13
Ví d : Java client (UDP)
keyboard monitor
input
stream
inFromUser
ProcessClient
process Input: ñ c gói tin
(nh c l i: TCP g i
Output: g i gói tin “byte stream ”)
(nh c l i: TCP g i
“byte stream”) UDP UDP
packet packet
sendPacket
receivePacket
clientclientSocket UDP
socket UDP
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
InetAddress IPAddress = InetAddress.getByName("hostname");
hostname >IP
s d ng DNS 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 =
length, IP addr, port new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
G i datagram clientSocket.send(sendPacket);
t i server
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
ñ c datagram
clientSocket.receive(receivePacket);
t server
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
DatagramSocket serverSocket = new DatagramSocket(9876);
t i c ng 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);
Nh n serverSocket.receive(receivePacket);
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
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_socket.pdf