[r]
Trang 1Chương 5
Lập trình socket
Trang 2NỘI DUNG
• Tổng quan
• Lập trình Socket với TCP
• Lập trình Socket với UDP
Trang 3Tổng quan
Viết chương trình
– 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
thiết bị mạng ngoài phạm
vi này
application
transport network data link physical
application
transport network data link physical
application
transport network data link physical
Trang 4Lập trình socket
Socket API
• Được giới thiệu trong BSD4.1
UNIX, 1981
• Được khởi tạo, sử dụng và hủy
một cách tường minh bởi ứng
dụng
• Mô hình client/server
• Hai loại dịch vụ truyền tải qua
socket API:
– Datagram không bảo đảm
– connection-oriented bảo
đảm
Một giao tiếp cục bộ trên host, được tạo bởi ứng dụng và được điều khiển bởi hệ điều hành, qua đó quá trình ứng dụng có thể truyền (hay nhận) đến (hay từ) quá trình khác
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
Trang 5Giao tiếp giữa các quá trình trên hai host
khác nhau
• process truyền/nhận
thông điệp đến/từ socket
của nó
• socket tương tự như cửa
ra vào
– Quá trình truyền thông
điệp ra cửa
– 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,
thông tin được chuyển đến
socket của quá trình thu
process
TCP với Buffer và các biến socket
host hay server
process
TCP với Buffer và các biến socket
host hay server
Internet
Kiểm soát bởi
hệ điều hành
Kiểm soát bởi người lập trình
• API: (1) chọn giao thức truyền tải ; (2) khả năng sửa một vài
thông số
Trang 6Vi dụ: Java server (UDP)
import java.io.*;
import java.net.*;
class UDPServer { public static void main(String args[]) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket);
Tạo datagram socket
tại port 9876
Tạo chỗ cho
datagram nhận
Nhận datagram
Trang 7Ví dụ: Java server (UDP) (tiếp theo)
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress,
port);
serverSocket.send(sendPacket);
} } }
Lấy IP addr
port #, của
sender
ghi datagram
Ra socket
Kết thúc vòng lặp while, trở lại chờ datagram khác Tạo datagram để
gửi cho client