Thông tin tài liệu:
Bài giảng Lập trình mạng: Chương 2 Lập trình Socket hướng kết nối, cung cấp cho người học những kiến thức như: Mô hình socket hướng kết nối; Một chương trình Client đơn giản; Xử lý một số vấn đề trong lập trình hướng kết nối; Sử dụng C# stream với TCP. Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình mạng: Chương 2 - ThS. Trần Đắc Tốt
Chương 2
Lập trình Socket hướng kết nối
1
Mục lục chương
1. Mô hình socket hướng kết nối
2. Một chương trình Client đơn giản
3. Xử lý một số vấn đề trong lập trình hướng kết
nối
4. Sử dụng C# stream với TCP
2
Mô hình socket hướng kết nối
• Mô hình ứng dụng Client – Server hướng kết nối
• Các thao tác phía server để xây dựng ứng dụng
• Các thao tác phía client để xây dựng ứng dụng
• Quá trình truyền tin giữa client và server
• Đóng kết nối
3
Mô hình ứng dụng Client – Server
hướng kết nối
1. Các thao tác để xây dựng ứng dụng client –
server hướng kết nối
- Các thao tác phía server
- Các thao tác phía client
- Quá trình truyền nhận dữ liệu
- Đóng kết nối
2. Mô hình client – server hướng kết nối
4
Các thao tác để xây dựng ứng
dụng client – server hướng kết nối
Phía server:
- Tạo ra một Sockets
- Gắn Sockets đó với một địa chỉ cụ thể (binding)
- Lắng nghe kết nối tới
- Chấp nhận kết nối
Phía Client:
- Tạo ra một Sockets
- Kết nối đến Server
Quá trình truyền nhận dữ liệu
Đóng kết nối
5
Các thao tác để xây dựng ứng
dụng client – server hướng kết nối
Server
socket()
bind()
listen()
• socket(): Server yªu cÇu t¹o mét socket ®Ó cã thÓ sö dông c¸c dÞch vô cña
tÇng vËn chuyÓn.
• bind(): Server yªu cÇu g¸n sè hiÖu port cho socket.
• listen(): Server l¾ng nghe c¸c yªu cÇu nèi kÕt tõ c¸c client trªn cæng ®·
®ưîc g¸n.
• Server s½n sµng phôc vô client.
Các thao tác để xây dựng ứng dụng client –
server hướng kết nối
Client Server
socket() socket()
bind()
listen()
connect()
accept()
• socket(): Client yªu cÇu t¹o mét socket ®Ó cã thÓ sö dông c¸c dÞch vô cña
tÇng vËn chuyÓn.
• connect(): Client gëi yªu cÇu nèi kÕt ®Õn Server cã ®Þa chØ IP vµ port x¸c
®Þnh.
• accept(): Server chÊp nhËn nèi kÕt cña Client, kªnh giao tiÕp ¶o ®ưîc hình
thµnh, Client vµ Server cã thÓ trao ®æi th«ng tin víi nhau.
Các thao tác để xây dựng ứng
dụng client – server hướng kết nối
Client Server
accept()
write() Request Message
read()
write()
Reply Message
read()
• Sau khi chÊp nhËn yªu cÇu nèi kÕt, th«ng thưêng server thùc hiÖn lÖnh
read() và chờ cho ®Õn khi cã th«ng ®iÖp yªu cÇu (Request Message) tõ
client.
• Server ph©n tÝch vµ thùc thi yªu cÇu. KÕt qu¶ sÏ ®ưîc gëi vÒ client b»ng lÖnh
write().
• Sau khi gëi yªu cÇu b»ng lÖnh write(), client chê nhËn th«ng ®iÖp kÕt qu¶
(ReplyMessage) tõ server b»ng lÖnh read().
Các thao tác để xây dựng ứng
dụng client – server hướng kết nối
Client Server
accept()
write()
read()
write()
read()
close() close()
• C¸c c©u lÖnh read(), write() cã thÓ được thực hiÖn nhiÒu lÇn (ký
hiÖu b»ng hình ellipse).
• Kªnh ¶o sÏ bÞ xãa khi Server hoÆc Client ®ãng socket b»ng lÖnh
close().
Mô hình ứng dụng client – server
hướng kết nối
Client Server
socket() socket()
bind()
listen()
connect()
accept()
write()
read()
write()
read()
close() close()
Các thao tác phía Server
1. Tạo một socket
2. Gắn socket với một địa chỉ cụ thể
(binding)
3. Đặt socket ở trạng thái lắng nghe kết nối
tới từ client
4. Chấp nhận kết nối từ client
11
1.Tạo một Socket
• Socket server = new
Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
12
2. Gắn socket với một địa chỉ cụ
thể (binding)
• Sau khi một socket đã được tạo, nó phải
được gắn với một địa chỉ cụ thể trong hệ
thống.
• Phương thức Bind() thực hiện chức năng
này
• Cú pháp:
– Bind(EndPoint address)
13
Gắn socket với một địa chỉ cụ thể
(binding)
• Ví dụ về gọi hàm Bind()
IPHostEntry local =
Dns.GetHostByName(Dns.GetHostName());
IPEndPoint iep = new
IPEndPoint(local.AddressList[0], 5000);
Socket server = new
Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
server.Bind(iep);
14
3. Đặt socket ở trạng thái lắng
nghe kết nối tới từ client
• Sau khi socket đã được gắn với một địa
chỉ cụ thể, sử dụng phương thức Listen()
để đặt socket ở trạng thái lắng nghe kết
nối từ Client tới.
• Cú pháp:
– Listen(int conn)
– Trong đó: conn là số kết nối tối đa cho phép
đợi ở hàng đợi
...