Tải bản đầy đủ (.pptx) (80 trang)

lập trình mạng chapter 8. 1 java tcp

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.24 MB, 80 trang )

Chapter 8
L p trình m ng v i Java - ậ ạ ớ
TCP Socket
GV: Nguyễn Thị Thanh Vân - CNTT
1
Java Simplified / Session 22 / 2 of 45

Giao tiếp Socket

Đặc điểm, cấu trúc Socket

TCP Socket

UDP Socket

Thiết kế giải thuật server/client

Các lớp trong gói java.net

Ứng dụng client/server qua TCP socket

Ứng dụng client/server qua UDP socket
Objectives
2
Java Simplified / Session 22 / 3 of 45

Trong quá trình truyền tin có thể xảy ra nhiều sự cố:

một hay nhiều gói bị mất hay bị hỏng
◦ cần phải truyền lại hay không hoặc
◦ các gói tin đến không theo đúng trình tự.



Cần xử lý;
◦ việc phân chia dữ liệu thành các gói,

tạo các header, phân tích header của các gói đến,

quản lý danh sách các gói đã nhận được/ chưa nhận
được…

=> nhiều công việc cần phải thực hiện, và đòi hỏi rất
nhiều phần mềm phức tạp để xử lý.
=> Socket
Giới thiệu
3
Java Simplified / Session 22 / 4 of 45

Socket API – Socket Application Programming
Interface:

là một cuộc cách mạng của Berkeley UNIX.

được giới thiệu ở BSD4.1 UNIX, 1981

Xuất phát từ ý tưởng quan trọng nhất của UNIX:
◦ tất cả các thao tác vào/ra giống như vào ra tệp tin

Socket xem một liên kết mạng như là một luồng mà có
thể đọc dữ liệu ra hay ghi dữ liệu vào từ luồng này.
◦ Nó che dấu người lập trình khỏi các chi tiết mức thấp của
mạng như môi kiểu đường truyền, các kích thước gói, yêu

cầu truyền lại gói, các địa chỉ mạng
Giới thiệu
4
Java Simplified / Session 22 / 5 of 45

Socket:

“cơ chế ổ cắm”

Các máy có khả năng kết nối được với nhau.

Dùng cơ chế client/server

Cung cấp hai dịch vụ chính chuyển dữ liệu
thông qua socket API:

unreliable datagram (UDP)

reliable, byte stream-oriented (TCP)
KHÁI NIỆM VỀ SOCKET
5
Java Simplified / Session 22 / 6 of 45
Socket trong TCP/IP Model
6
Java Simplified / Session 22 / 7 of 45
Socket trong TCP/IP Model
7
Java Simplified / Session 22 / 8 of 45

socket được định nghĩa trong hệ điều hành

bằng một cấu trúc, được xem như điểm nối
để hai procceses giao tiếp với nhau.

Cấu trúc socket gồm 5 fields:

Family : xác định protocol group

Type : xác loại socket, stream, datagram hay raw
socket.

Protocol : kieu gthuc. thường gán giá trị bằng 0

Local Socket Address và

Remote Socket Address : là địa chỉ socket của
process cục bộ và từ xa.
Socket
8
Java Simplified / Session 22 / 9 of 45
Cấu trúc socket
9
Java Simplified / Session 22 / 10 of 45

Địa chỉ của một socket trên mạng TCP/IP gồm có
hai phần:

Địa chỉ IP: một số nguyên 32 bits xác định duy nhất một
card mạng trên máy tính (host)

Cổng dịch vụ: một số nguyên 16 bits xác định điểm kết

nối với một ứng dụng trên một host.
Các ứng dụng thương mại hay các dịch vụ thông dụng sử
dụng các cổng dịch vụ chuẩn đã được đăng ký
Địa chỉ của một socket
10
Java Simplified / Session 22 / 11 of 45
Ví dụ mô tả đặc trưng địa chỉ IP và port trong các
socket giao tiếp 3 dịch vụ khác nhau
SERVER
IP: 192.168.0.1
HTTP-SERVER
FTP-SERVER
SQL-SERVER
Port 80
Port 21
Port 1433
CLIENT
IP: 192.168.0.15
Web browser
FTP-client
data
application
Kết nối với
socket(192.168.0.1, 80)
Kết nối với
socket(192.168.0.1,
21)
Kết nối với
socket(192.168.0.1, 1433)
Java Simplified / Session 22 / 12 of 45

struct sockaddr_in
{
u_char sin_len;
u_short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Cấu trúc địa chỉ socket
12
Java Simplified / Session 22 / 13 of 45
1. Hàm socket() để tạo mới một socket
2. Hàm bind() Đăng ký socket đã khởi tạo với địa chỉ socket local. Trả về 0
nếu thành công, -1: thất bại.
3. Hàm connect() để client kết nối đến server
4. Hàm listen() đặt socket ở trạng thái chờ, lắng nghe kết nối từ phía client
5. Hàm accept() : chấp nhận kết nối từ client đến
6. Hàm read() để đọc dữ liệu từ socket vào bộ nhớ
7. Hàm write() để ghi dữ liệu từ bộ nhớ -> socket
8. Hàm sendto() để gởi dữ liệu đến một socket từ xa
9. Hàm recvfrom(): nhận dữ liệu đến từ 1 socket từ xa
Các hàm socket (in System Calls Interface )
13
Java Simplified / Session 22 / 14 of 45

Stream Socket: dùng cho connection-
oriented protocol như TCP.

Datagram Socket: dùng cho connectionless
protocol như UDP.


Raw Socket: dùng cho một số protocol của
một số ứng dụng đặc biệt, dùng các dịch vụ
trực tiếp của lớp IP.
Các loại Socket
14
Java Simplified / Session 22 / 15 of 45

Có thể sử dụng để liên lạc theo mô hình
client/server

Có 1 đường kết nối ảo giữa 2 phía
Server/client

Một trong 2 phía phải đợi tiến trình kia yêu
cầu kết nối

Server lắng nghe và chấp nhận yêu cầu kết nối

Mỗi thông điệp gửi đều có xác nhận trở về

Các gói tin chuyển đi tuần tự
TCP socket – đặc điểm
15
Java Simplified / Session 22 / 16 of 45

Client phải kết nối đến server
◦ server process phải chạy trước (phần tử thụ động)

server phải tạo một socket để lắng nghe và chấp nhận các kết nối từ client


Client kết nối đến server bằng cách:
◦ Khởi tạo TCP socket ở local

Xác định IP address, port number của server process và kết nối đến

Sau khi client khởi tạo socket, nó sẽ thiết lập kết nối đến server

Khi server nhận yêu cầu kết nối, nó sẽ chấp nhận yêu cầu và khởi
tạo socket mới để giao tiếp với client.

Cho phép server chấp nhận nhiều client tại một thời điểm.
TCP socket – hoạt động
16
Java Simplified / Session 22 / 17 of 45
TCP socket - hoạt động
17
Java Simplified / Session 22 / 18 of 45

Cung cấp cơ chế truyền không tin cậy các nhóm bytes
(datagrams) giữa client và server.

Không cần thiết lập kết nối giữa client với server.

Client phải gởi kèm địa chỉ IP và port đích

Server khi nhận dữ liệu sẽ phân tích địa chỉ của client để
truyền lại.

◦ Thông điệp có thể gửi nhiều lần


Người gửi không chắc chắn thông điệp tới người nhận

Thông điệp sau có thể đến đích trước thông điệp gửi trước nó
UDP socket – đặc điểm
18
Java Simplified / Session 22 / 19 of 45
UDP socket – hoạt động
19
Java Simplified / Session 22 / 20 of 45

Một trong 2 quá trình phải công bố số hiệu
cổng của socket mà mình sử dụng

Mỗi cổng giao tiếp thể hiện 1 địa chỉ xác định
trong hệ thống

Có thể nhận dữ liệu gửi đến cổng giao tiếp
này từ các quá trình khác.
Số hiệu cổng của socket
20
Java Simplified / Session 22 / 21 of 45

Thiết kế giải thuật cho client/Server.

Công cụ viết

Dùng các class trong Java

Example

Viết các ứng dụng Socket
21
Java Simplified / Session 22 / 22 of 45

Giải thuật cho chương trình client/Server dùng
TCP

Giải thuật cho chương trình client/Server dùng
UDP

Chương trình server có hai loại:

Lặp (iterative)

Đồng thời (concurrent).

Hai dạng giao thức chương trình server:

Connection-oriented (TCP)

Connectionless. (UDP)
Thiết kế giải thuật cho client/Server
22
Java Simplified / Session 22 / 23 of 45

Client
1. Xác định địa chỉ server.
2. Tạo socket.
3. Kết nối đến Server
4. Gởi/nhận dữ liệu theo giao thức đã thiết kế.

5. Đóng socket.

Server
1. Tạo socket
2. Đăng ký với hệ thống
3. Lắng nghe kết nối
4. Chấp nhận kết nối
5. Gửi nhận dữ liệu theo đúng giao thức đã thiết kế.
6. Đóng kết nối sau khi đã hoàn thành và trở lại trạng thái lắng
nghe chờ kết nối mới
Giải thuật cho client/Server TCP
23
Java Simplified / Session 22 / 24 of 45

Client
1. Xác định địa chỉ server.
2. Tạo socket.
3. Gởi/nhận dữ liệu theo giao thức đã thiết kế.
4. Đóng socket.

Server
1. Tạo socket
2. Đăng ký với hệ thống
3. Lặp công việc đọc dữ liệu từ client gửi đến và gửi trả kết
quả cho client theo đúng giao thức lớp ứng dụng đã thiết
kế.
4. Đóng Socket
Giải thuật cho client/Server UDP
24
Java Simplified / Session 22 / 25 of 45


Tạo socket và đăng ký với hệ thống

Đặt socket ở chế độ chờ, lắng nghe kết nối.

Khi có request từ client, Server sẽ:

chấp nhận kết nối,

tạo một process con để xử lý.

Quay lại trạng thái chờ, lắng nghe kết nối mới

Công việc của process con:

Nhận thông tin kết nối của client

Giao tiếp với client theo giao thức lớp ứng dụng đã thiết
kế

Đóng kết nối và kết thúc process con.

Đóng socket
Thiết kế giải thuật cho Server – concurrent,
connection-oriented (TCP)
25

×