Bài giảng Lập trình mạng - Chương 1: Lập trình mạng dùng Socket - Nguyễn Cao Đạt

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG DÙNG SOCKET  
CHƯƠNG 1  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 1  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
KHÁI NIỆM VỀ SOCKET  
z 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  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 2  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
KHÁI NIỆM VỀ SOCKET  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 3  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
z Thiết kế giải thuật cho client  
– Giải thuật cho chương trình client dùng UDP  
z Xác định địa chỉ server.  
z Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế.  
z Đóng socket.  
– Giải thuật cho chương trình client dùng TCP  
z Xác định địa chỉ server  
z Tạo socket.  
z Kết nối đến server.  
z Gởi/nhận dữ liệu theo giao thức lớp ứng dụng đã thiết kế.  
z Đóng kết nối.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 4  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
z Thiết kế giải thuật cho Server  
– Chương trình server có hai loại:  
z Lặp(iterative)  
z Đồng thời (concurrent).  
– Hai dạng giao thức chương trình server:  
z Connection-oriented  
z Connectionless.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 5  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 6  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 7  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 8  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 9  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 10  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
THIẾT KẾ GIẢI THUẬT CLIENT/SERVER  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 11  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z Gói java.net  
– InetAddress  
– Socket  
– URL  
– URLConnection  
– DatagramSocket  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 12  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z 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:  
z public static InetAddess InetAddress.getByName(String hostname)  
z public static InetAddess [] InetAddress.getAllByName(String  
hostname)  
z public static InetAddess InetAddress.getLocalHost()  
– Để lấy địa chỉ IP hay tên dùng các phương thức:  
z getHostAddress()  
z getHostName()  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 13  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z In địa chỉ IP của localhost  
import java.net.*;  
public class HostInfo {  
p
H
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");  
}
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 14  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z 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");  
}
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 15  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z Các chương trình đọc thêm  
– Tạo một địa chỉ IP từ mảng byte, chuỗi String.  
– Cho một địa chỉ tìm tên máy.  
z ReverseTest.java  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 16  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 17  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z Socket class  
– Class mô tả về socket  
–
z Socket(InetAddress address, int port)  
z Socket(String host, int port)  
z Socket(InetAddress address, int port, InetAddress, localAddr, int  
localPort)  
z Socket(String host, int port, InetAddress, localAddr, int localPort)  
z Socket()  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 18  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z Socket class (tiếp theo)  
– Lấy thông tin về một socket  
z InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối  
đến.  
z int getPort() : trả về địa chỉ mà socket kết nối đến.  
z InetAddress getLocalAddress() : trả về địa chỉ cục bộ.  
z int getLocalPort() : trả về địa chỉ cục bộ.  
– Sử dụng Streams  
z public OutputStream getOutputStream() throws IOException  
Trả về một output stream cho việc viết các byte đến socket này.  
z public InputStream getInputStream() throws IOException  
Trả về một input stream cho việc đọc các byte từ socket này.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 19  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z Kết nối đên 1 số webserver  
import java.net.*;  
import java.io.*;  
p
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());  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 20  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z 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  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 21  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z ServerSocket class  
– Class mô tả về ServerSocket  
–
z ServerSocket(int port) throws IOException  
z ServerSocket(int port, int backlog) throws IOException  
z ServerSocket(int port, int backlog, InetAddress bindAddr) throws  
IOException  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 22  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z ServerSocket class  
– Các phương thức trong ServerSocket  
z Socket accept() throws IOException : Lắng nghe một kết nối đến  
socket này và chấp nhận nó.  
z void close() throws IOException : Đóng socket.  
z InetAddress getInetAddress() : trả về địa chỉ cục bộ của socket  
z int getLocalPort() : Trả về port mà server đang lắng nghe.  
z void setSoTimeout(int timeout) throws SocketException  
z Enable/disable SO_TIMEOUT với khai báo timeout (milliseconds)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 23  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z DateTime Server  
import java.net.*;  
import java.io.*;  
im
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);  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 24  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH MẠNG TRÊN JAVA  
z 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);  
}
}
}
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 25  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH SOCKET VỚI UDP  
z 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.  
z Không cần thiết lập kết nối giữa client và server.  
z Sender phải gởi kèm địa chỉ IP và port đích  
z Server khi nhận dữ liệu sẽ phân tích địa chỉ của  
sender để truyền lại.  
z Có thể server chấp nhận nhiều client tại một thời  
điểm.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 26  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH SOCKET VỚI UDP  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 27  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (UDP Client)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 28  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (UDP Client)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 29  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (UDP Server)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 30  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (UDP Server)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 31  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH SOCKET VỚI TCP  
z 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ừ  
z 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.  
z 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.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 32  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH SOCKET VỚI TCP  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 33  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (TCP Client)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 34  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (TCP Client tiếp theo)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 35  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (TCP Server)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 36  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
VÍ DỤ (TCP Server – tiếp theo)  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 37  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
BÀI TẬP  
z Viết chương trình trên Java/C tương tự như  
nslookup:  
– Cho 1 địa chỉ IP tìm ra tên.  
– Giao diện tương tự như sau:  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 38  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
BÀI TẬP  
z Viết chương trình echo client trên Java.  
– echo : 7/tcp, 7/udp.  
z Viết chương trình finger client trên Java.  
– Finger: 79/tcp.  
z Viết chương trình echo server trên Java.  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 39  
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM  
LẬP TRÌNH SOCKET TRÊN UNIX  
Primitives  
Meaning  
SOC
BIND  
Attach a local address to a socket  
LISTEN  
ACCEPT  
Announce willingness to accept connections; give queue size  
Block the caller until connection attempt arrives  
CONNECT Actively attempt to establish a connection  
SEND  
RECEIVE  
CLOSE  
Send some data over the connection  
Receive some data from the connection  
Release the connection  
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin  
Trang 40  
Tải về để xem bản đầy đủ
pdf 35 trang Thùy Anh 15480 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình mạng - Chương 1: Lập trình mạng dùng Socket - Nguyễn Cao Đạt", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_chuong_1_lap_trinh_mang_dung_socket.pdf