Mng máy tính điện toán đám y
MC LC
Bi 8: Lp trình Socket ................................................ 2
Socket module trong python ............................................ 2
Các phương thc s dng cho Server socket ............................. 3
Các phương thc s dng cho Client socket ............................. 3
Các phương thc chung cho Socket ...................................... 3
BÀI TP CHƯƠNG 8................................................................................................................................. 6
TÀI LIU THAM KHO .................................................... 7
Trang 1
Mng máy tính điện toán đám y
Bi 8: Lp trình Socket
Mc tiêu:
- Hiu gii thích đưc các hàm bn trong lp trình socket
s dng ngôn ng python
- Lp trình mt ng dng đơn gin minh ha hình kết ni
client-server
Ni dung chính:
- Các c thiết lp kết ni socket theo giao thc TCP client-
server bng ngôn ng python
- d minh ha v kết ni socket
- Xây dng ng dng đơn gin theo hình client-server
Socket l đim đầu/cui (endpoint) trong mt kênh giao tiếp. Các
socket th giao tiếp bên trong mt tiến trình, gia các tiến
trình trong cùng mt thiết b, hoc gia các tiến trình khác nhau.
Socket module trong python
Khi to mt socket, bn phi s dng hàm:
s = socket.socket(family, type, protocol=0)
- Family: giao thc đưc s dng trong k thut vn chuyn.
th là 1 trong 2 hng s: AF_UNIX hoc AF_INET
- Type: SOCK_STREAM cho giao thc ng kết ni, hoc SOCK_DGRAM
cho giao thc ng không kết ni
- Protocol: dùng để xác định s ng giao thc trong cùng mt
domain. Thưng đưc để trng, mc định 0
Khi đã khi to đối ng socket, bn th s dng các phương
thc để to chương trình cho Client hoc Server:
Trang 2
Mng máy tính điện toán đám y
Các phương thc s dng cho Server socket
Phương thc
Miêu t
s.bind((addr,port))
Gn kết địa ch (hostname, port number) ti
socket
s.listen(backlog)
Thiết lp bt đầu lng TCP listenter để
lng nghe yêu cu kết ni t client
backlog: s ng ti đa các kết ni th
trong hng đi(0-5)
s.accept()
Chp nhn mt cách th động kết ni TCP
client. Đợi cho ti khi kết ni ti thì
chp nhn
Các phương thc s dng cho Client socket
Phương thc
Miêu t
s.connect((addr,port))
Khi to kết ni TCP server
Các phương thc chung cho Socket
Phương thc
s.recv(buflen[,flags])
s.send(data[,flag])
s.recvfrom(buflen[,flags])
s.sendto(data[,flag],addr)
s.sendall(data[,flag])
s.close()
s.gethostname()
Thí d 1: Viết mt chương trình TCPServer đơn gin
Đầu tiên, bn to mt đối ng socket.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Trang 3
Mng máy tính điện toán đám y
#SimpleServer.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 12345
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print("Da chap nhan ket noi tu ", addr)
output = "Cam on ban da ket noi"
c.sendall(output.encode("utf-8"))
c.close()
#SimpleClient
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 12345
Tham s AF_INET cho biết chúng ta s dng IPv4, SOCK_STREAM
dùng giao thc TCP. Ngoài ra, còn mt s giá tr khác như AF_INET6
dùng IPv6, AF_UNIX ch kết ni các ng dng trong mt máy
(không dùng mng), SOCK_DGRAM là dùng giao thc UDP.
Sau đó, đối ng socket đưc s dng để gi các hm khác để thiết
lp mt socket server:
Phương thc bind(hostname, port) ch định socket lng nghe vi địa
ch IP ca máy ly t phương thc gethostname() trên port xác định.
Phương thức listen() cho python biết socket này mt server,
tham s ca phuong thc này s ng các kết ni th trong
hng đi
Phương thc accept() đưa server vo trng thái ch đợi cho đến khi
mt client kết ni ti port bn đã xác định, phương thc này
tr v mt đi tưng connection biu din kết ni ti client đó.
Thí d 2: Viết mt chương trình Client đơn gin
Hàm socket.connect(hostname, port) m mt kết ni TCP ti hostname
trên port đã cho. Khi một socket đã được m, bn th đọc
thông tin t nó ging như bt k đối tưng IO nào
Trang 4
Mng máy tính điện toán đám y
Trang 5
s.connect((host, port))
print(s.recv(1024))
s.close()
Mng máy tính điện toán đám y
Bài 1: T thí d trên, sinh viên viết 1 echo-server theo yêu cu
sau:
- Server: lng nghe trên mt port xác định (do sinh viên quy định),
chp nhn yêu cu kết ni t mt client, hin th thông tin client,
nhn mt chui t client sau đó chuyn tr li cho client
- Client: kết ni ti server thông qua mt port xác định (do sinh
viên quy định), gi chui đến server, nhn chui mi t server
hin th trên màn hình ca client
Bài 2: T thí d trên, sinh viên viết li h thng mt client-
server theo yêu cu sau:
- Server: lng nghe trên mt port xác định (do sinh viên quy định),
chp nhn yêu cu kết ni t mt client, hin th thông tin client,
nhn mt chui t client sau đó chuyn thành ch hoa tr chui
mi v cho client
- Client: kết ni ti server thông qua mt port xác định (do sinh
viên quy định), gi chui đến server, nhn chui mi t server
hin th trên màn hình ca client
Trang 6
BÀI TP CHƯƠNG 8
Mng máy tính điện toán đám y
TÀI LIU THAM KHO
https://daynhauhoc.com/t/lam-server-python-truy-cap-duoc-tren-internet/51955/4
https://www.academia.edu/33214759/L%E1%BA%ADp_tr%C3%ACnh_m%E1%BA%A1ng_trong_Python
https://www.youtube.com/watch?v=O8bIjCFhgPg
Trang 7

Preview text:

Mạng máy tính và điện toán đám mây MỤC LỤC
Bài 8: Lập trình Socket ................................................ 2
Socket module trong python ............................................ 2
Các phương thức sử dụng cho Server socket ............................. 3
Các phương thức sử dụng cho Client socket ............................. 3
Các phương thức chung cho Socket ...................................... 3
BÀI TẬP CHƯƠNG 8................................................................................................................................. 6
TÀI LIỆU THAM KHẢO .................................................... 7 Trang 1
Mạng máy tính và điện toán đám mây
Bài 8: Lập trình Socket Mục tiêu:
- Hiểu và giải thích được các hàm cơ bản trong lập trình socket
sử dụng ngôn ngữ python
- Lập trình một ứng dụng đơn giản minh họa mô hình kết nối client-server Nội dung chính:
- Các bước thiết lập kết nối socket theo giao thức TCP client-
server bằng ngôn ngữ python
- Ví dụ minh họa về kết nối socket
- Xây dựng ứng dụng đơn giản theo mô hình client-server
Socket là điểm đầu/cuối (endpoint) trong một kênh giao tiếp. Các
socket có thể giao tiếp bên trong một tiến trình, giữa các tiến
trình trong cùng một thiết bị, hoặc giữa các tiến trình khác nhau. Socket module trong python
Khởi tạo một socket, bạn phải sử dụng hàm:
s = socket.socket(family, type, protocol=0)
- Family: giao thức được sử dụng trong kỹ thuật vận chuyển. Có
thể là 1 trong 2 hằng số: AF_UNIX hoặc AF_INET
- Type: SOCK_STREAM cho giao thức hướng kết nối, hoặc SOCK_DGRAM
cho giao thức hướng không kết nối
- Protocol: dùng để xác định số lượng giao thức trong cùng một
domain. Thường được để trống, mặc định là 0
Khi đã khởi tạo đối tượng socket, bạn có thể sử dụng các phương
thức để tạo chương trình cho Client hoặc Server: Trang 2
Mạng máy tính và điện toán đám mây
Các phương thức sử dụng cho Server socket Phương thức Miêu tả s.bind((addr,port))
Gắn kết địa chỉ (hostname, port number) tới socket s.listen(backlog)
Thiết lập và bắt đầu lắng TCP listenter để
lắng nghe yêu cấu kết nối từ client
backlog: số lượng tối đa các kết nối có thể có trong hàng đợi(0-5) s.accept()
Chấp nhận một cách thụ động kết nối TCP
client. Đợi cho tới khi có kết nối tới thì chấp nhận
Các phương thức sử dụng cho Client socket Phương thức Miêu tả s.connect((addr,port))
Khởi tạo kết nối TCP server
Các phương thức chung cho Socket Phương thức Miêu tả s.recv(buflen[,flags])
Nhận dữ liệu từ socket (TCP msg)
buflen: số bytes tối đa có thể nhận
Giá trị trả về là một chuỗi thể hiện dữ liệu nhận được s.send(data[,flag])
Truyền dữ liệu qua socket (TCP msg)
Trả về số lượng byte đã được truyền
s.recvfrom(buflen[,flags]) Nhận UDP message
Receive data from the socket, up to
buflen bytes, returning also the
remote host and port from which the data came
s.sendto(data[,flag],addr) Truyền UDP message
Send the data through the socket
Return the number of bytes sent s.sendall(data[,flag])
Send data to the socket (this method
continues to send data from string
until either all data has been sent
or an error occurs) None is returned on success s.close() Đóng socket s.gethostname() Trả về hostname
Thí dụ 1: Viết một chương trình TCPServer đơn giản
Đầu tiên, bạn tạo một đối tượng socket.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) Trang 3
Mạng máy tính và điện toán đám mây
Tham số AF_INET cho biết chúng ta sử dụng IPv4, SOCK_STREAM là
dùng giao thức TCP
. Ngoài ra, còn một số giá trị khác như AF_INET6
là dùng IPv6, AF_UNIX là chỉ kết nối các ứng dụng trong một máy
(không dùng mạng), SOCK_DGRAM là dùng giao thức UDP.
Sau đó, đối tượng socket được sử dụng để gọi các hàm khác để thiết lập một socket server:
Phương thức bind(hostname, port) chỉ định socket lắng nghe với địa
chỉ IP của máy lấy từ phương thức gethostname() trên port xác định.
Phương thức listen() cho python biết socket này là một server,
tham số của phuong thức này là số lượng các kết nối có thể có trong hàng đợi
Phương thức accept() đưa server vào trạng thái chờ đợi cho đến khi
có một client kết nối tới port mà bạn đã xác định, phương thức này
trả về một đối tượng connection biểu diễn kết nối tới client đó. #SimpleServer.py import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostname() port = 12345 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept()
print("Da chap nhan ket noi tu ", addr)
output = "Cam on ban da ket noi"
c.sendall(output.encode("utf-8")) c.close()
Thí dụ 2: Viết một chương trình Client đơn giản
Hàm socket.connect(hostname, port) mở một kết nối TCP tới hostname
trên port đã cho. Khi có một socket đã được mở, bạn có thể đọc
thông tin từ nó giống như bất kỳ đối tượng IO nào #SimpleClient import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostname() port = 12345 Trang 4
Mạng máy tính và điện toán đám mây s.connect((host, port)) print(s.recv(1024)) s.close() Trang 5
Mạng máy tính và điện toán đám mây BÀI TẬP CHƯƠNG 8
Bài 1: Từ thí dụ trên, sinh viên viết 1 echo-server theo yêu cầu sau:
- Server: lắng nghe trên một port xác định (do sinh viên quy định),
chấp nhận yêu cầu kết nối từ một client, hiển thị thông tin client,
nhận một chuỗi từ client sau đó chuyển trả lại cho client
- Client: kết nối tới server thông qua một port xác định (do sinh
viên quy định), gởi chuỗi đến server, nhận chuỗi mới từ server và
hiển thị trên màn hình của client
Bài 2: Từ thí dụ trên, sinh viên viết lại hệ thống một client-
server theo yêu cầu sau:
- Server: lắng nghe trên một port xác định (do sinh viên quy định),
chấp nhận yêu cầu kết nối từ một client, hiển thị thông tin client,
nhận một chuỗi từ client sau đó chuyển thành chữ hoa và trả chuỗi mới về cho client
- Client: kết nối tới server thông qua một port xác định (do sinh
viên quy định), gởi chuỗi đến server, nhận chuỗi mới từ server và
hiển thị trên màn hình của client Trang 6
Mạng máy tính và điện toán đám mây
TÀI LIỆU THAM KHẢO
https://daynhauhoc.com/t/lam-server-python-truy-cap-duoc-tren-internet/51955/4
https://www.academia.edu/33214759/L%E1%BA%ADp_tr%C3%ACnh_m%E1%BA%A1ng_trong_Python
https://www.youtube.com/watch?v=O8bIjCFhgPg Trang 7