Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG DÙNG SOCKET
Bài Giảng 2
Khoa Học và Kỹ Thuật Máy Tính Trang 1
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
KHÁI NIỆM VỀ SOCKET
(cid:1) Socket API
– Ðược giới thiệu ở BSD4.1 UNIX, 1981 – Ðược ứng dụng khởi tạo, sử dụng và hủy bỏ. – Dùng cơ chế client/server – Cung cấp hai dịch vụ chuyển dữ liệu thông qua
socket API: • unreliable datagram • reliable, byte stream-oriented
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 2
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
KHÁI NIỆM VỀ SOCKET
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 3
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
(cid:1) Thiết kế giải thuật cho client
– Giải thuật cho chương trình client dùng UDP
– Giải thuật cho chương trình client dùng TCP
(cid:1) Xác định địa chỉ server. (cid:1) Tạo socket. (cid:1) Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế. (cid:1) Đóng socket.
(cid:1) Xác định địa chỉ server (cid:1) Tạo socket. (cid:1) Kết nối đến server. (cid:1) Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế. (cid:1) Đóng kết nối.
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 4
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
(cid:1) Thiết kế giải thuật cho Server – Chương trình server có hai loại:
(cid:1) Lặp(iterative) (cid:1) Đồng thời (concurrent).
– Hai dạng giao thức chương trình server:
(cid:1) Connection-oriented (cid:1) Connectionless.
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 5
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 6
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 7
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 8
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 9
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 10
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 11
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) Gói java.net – InetAddress – ServerSocket – Socket – URL – URLConnection – DatagramSocket
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 12
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) InetAddress class
– Class mô tả về địa chỉ IP (Internet Protocol) – Các phương thức getLocalHost, getByName, hay getAllByName để tạo một InetAddress instance:
(cid:1) public static InetAddess InetAddress.getByName(String hostname) (cid:1) public static InetAddess [] InetAddress.getAllByName(String
hostname)
(cid:1) public static InetAddess InetAddress.getLocalHost() – Để lấy địa chỉ IP hay tên dùng các phương thức:
(cid:1) getHostAddress() (cid:1) getHostName()
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 13
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) In địa chỉ IP của localhost import java.net.*; public class HostInfo {
public static void main(String args[]) { HostInfo host = new HostInfo(); host.init(); } public void init() {
try {
InetAddress myHost = InetAddress.getLocalHost(); System.out.println(myHost.getHostAddress()); System.out.println(myHost.getHostName());
} catch (UnknownHostException ex) {
System.err.println("Cannot find local host");
}
}
}
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 14
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) In địa chỉ IP của proxy.hcmut.edu.vn import java.net.*; class kku{
public static void main (String args[]) {
try {
InetAddress[] addresses = InetAddress.getAllByName(“proxy.hcmut.edu.vn"); for (int i = 0; i < addresses.length; i++) {
System.out.println(addresses[i]);
}
} catch (UnknownHostException e) {
System.out.println("Could not find proxy.hcmut.edu.vn");
}
}
}
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 15
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) Các chương trình đọc thêm
– Tạo một địa chỉ IP từ mảng byte, chuỗi String.
(cid:1) InetAddressFactory.java – Cho một địa chỉ tìm tên máy.
(cid:1) ReverseTest.java
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 16
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 17
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) Socket class
– Class mô tả về socket – Tạo một socket
(cid:1) Socket(InetAddress address, int port) (cid:1) Socket(String host, int port) (cid:1) Socket(InetAddress address, int port, InetAddress, localAddr, int
localPort)
(cid:1) Socket(String host, int port, InetAddress, localAddr, int localPort) (cid:1) Socket()
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 18
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) Socket class (tiếp theo)
– Lấy thông tin về một socket
(cid:1) InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối
đến.
(cid:1) int getPort() : trả về địa chỉ mà socket kết nối đến. (cid:1) InetAddress getLocalAddress() : trả về địa chỉ cục bộ. (cid:1) int getLocalPort() : trả về địa chỉ cục bộ.
– Sử dụng Streams
(cid:1) public OutputStream getOutputStream() throws IOException Trả về một output stream cho việc viết các byte đến socket này.
(cid:1) public InputStream getInputStream() throws IOException Trả về một input stream cho việc đọc các byte từ socket này.
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 19
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) Kết nối đên 1 số webserver
import java.net.*; import java.io.*; public class getSocketInfo {
public static void main(String[] args) { for (int i = 0; i < args.length; i++) { try {
Socket theSocket = new Socket(args[i], 80); System.out.println("Connected to " + theSocket.getInetAddress() + " on port " + theSocket.getPort() + " from port " + theSocket.getLocalPort() + " of " + theSocket.getLocalAddress());
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 20
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) Kết nối đên 1 số webserver (tiếp theo) } catch (UnknownHostException e) {
System.err.println("I can't find " + args[i]);
} catch (SocketException e) {
System.err.println("Could not connect to " + args[i]);
} catch (IOException e) {
System.err.println(e);
}
} // end for } // end main
} // end getSocketInfo
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 21
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) ServerSocket class
– Class mô tả về ServerSocket – Tạo một ServerSocket
(cid:1) ServerSocket(int port) throws IOException (cid:1) ServerSocket(int port, int backlog) throws IOException (cid:1) ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 22
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) ServerSocket class
– Các phương thức trong ServerSocket
(cid:1) Socket accept() throws IOException : Lắng nghe một kết nối đến
socket này và chấp nhận nó.
(cid:1) void close() throws IOException : Đóng socket. (cid:1) InetAddress getInetAddress() : trả về địa chỉ cục bộ của socket (cid:1) int getLocalPort() : Trả về port mà server đang lắng nghe. (cid:1) void setSoTimeout(int timeout) throws SocketException (cid:1) Enable/disable SO_TIMEOUT với khai báo timeout (milliseconds)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 23
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) DateTime Server import java.net.*; import java.io.*; import java.util.Date; public class DayTimeServer {
public final static int daytimePort = 5000; public static void main(String[] args) {
ServerSocket theServer; Socket theConnection; PrintStream p; try {
theServer = new ServerSocket(daytimePort);
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 24
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH MẠNG TRÊN JAVA
(cid:1) DateTime Server (tiếp theo) while (true) {
theConnection = theServer.accept(); p = new PrintStream(theConnection.getOutputStream()); p.println(new Date()); theConnection.close(); theServer.close();
}
}catch (IOException e) {
System.err.println(e);
}
}
}
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 25
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH SOCKET VỚI UDP
(cid:1) Cung cấp cơ chế truyền không tin cậy giữa các nhóm các byte (datagrams) giữa client và server. (cid:1) Không cần thiết lập kết nối giữa client và server. (cid:1) Sender phải gởi kèm địa chỉ IP và port đích (cid:1) Server khi nhận dữ liệu sẽ phân tích địa chỉ của
sender để truyền lại.
(cid:1) Có thể server chấp nhận nhiều client tại một thời
điểm.
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 26
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH SOCKET VỚI UDP
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 27
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (UDP Client)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 28
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (UDP Client)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 29
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (UDP Server)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 30
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (UDP Server)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 31
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH SOCKET VỚI TCP
(cid:1) Server
– Server process phải chạy trước. – Server phải tạo một socket để lắng nghe và chấp nhận các kết nối từ
client.
(cid:1) Client
– Khởi tạo TCP socket. – Xác định IP address, port number của server. – Thiết lập kết nối đến server.
(cid:1) 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. – Có thể server chấp nhận nhiều client tại một thời điểm.
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 32
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
LẬP TRÌNH SOCKET VỚI TCP
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 33
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (TCP Client)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 34
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (TCP Client tiếp theo)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 35
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (TCP Server)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 36
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
VÍ DỤ (TCP Server – tiếp theo)
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 37
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
BÀI TẬP
(cid:1) Viết chương trình trên Java/C tương tự như
nslookup: – Cho 1 tên tìm ra địa chỉ IP. – Cho 1 địa chỉ IP tìm ra tên. – Giao diện tương tự như sau:
Khoa Khoa Học và Kỹ Thuật Máy Tính Trang 38