báo cáo thực hành lập trình mạng
Trang 1BỘ MÔN MẠNG VÀ TRUYỀN THÔNG
BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG
GV hướng dẫn : Nguyễn Văn Nguyên
Đà Nẵng 2011
MỤC LỤC
Trang 2CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 5
1.1 MÔ HÌNH CLIENT-SERVER: 5
1.2 GIAO THỨC TCP 6
1.3 GIAO THỨC UDP: 6
CHƯƠNG 2 THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH 8
2.1 LAB1 8
2.1.1 Net1 8
2.1.2 Student Manager 9
2.1.3 NumberTCPSimple 13
2.2 LAB2 17
2.2.1 Net1 17
2.2.2 Net2 19
2.2.3 Net3 21
2.2.4 Net4 22
2.2.5 KnockKnock 24
2.3 LAB3 29
2.3.1 MulticastPeer 29
2.3.2 Multicast 31
Chương 3. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 37
Chương 1. CƠ SỞ LÝ THUYẾT
Trang 31.1 Mô hình client-server:
Mô hình client/server như sau: Client/Server là mô hình tổng quát nhất, trên thực tếthì một server có thể được nối tới nhiều server khác nhằm làm việc hiệu quả và nhanhhơn Khi nhận được 1 yêu cầu từ client, server này có thể gửi tiếp yêu cầu vừa nhậnđược cho server khác ví dụ như database server vì bản thân nó không thể xử lý yêu cầunày được Máy server có thể thi hành các nhiệm vụ đơn giản hoặc phức tạp Ví dụ nhưmột máy chủ trả lời thời gian hiện tại trong ngày, khi một máy client yêu cầu lấy thôngtin về thời gian nó sẽ phải gửi một yêu cầu theo một tiêu chuẩn do server định ra, nếuyêu cầu được chấp nhận thì máy server sẽ trả về thông tin mà client yêu cầu Có rấtnhiều các dịch vụ server trên mạng nhưng nó đều hoạt động theo nguyên lý là nhận cácyêu cầu từ client sau đó xử lý và trả kết quả cho client yêu cầu Thông thường chươngtrình server và client được thi hành trên hai máy khác nhau Cho dù lúc nào server cũng
ở trạng thái sẵn sàng chờ nhận yêu cầu từ client nhưng trên thực tế một tiến trình liêntác qua lại (interaction) giữa client và server lại bắt đầu ở phía client, khi mà client gửitín hiệu yêu cầu tới server Các chương trình server thường đều thi hành ở mức ứngdụng (tầng ứng dụng của mạng) Sự thuận lợi của phương pháp này là nó có thể làmviệc trên bất cứ một mạng máy tính nào có hỗ trợ giao thức truyền thông chuẩn cụ thể ởđây là giao thức TCP/IP Với các giao thức chuẩn này cũng giúp cho các nhà sản xuất
có thể tích hợp nhiều sản phẩm khác nhau của họ lên mạng mà không gặp phải khókhăn gì Với các chuẩn này thì các chương trình server cho một dịch vụ nào đấy có thểthi hành trên một hệ thống chia sẻ thời gian (timesharing system) với nhiều chươngtrình và dịch vụ khác hoặc nó có thể chạy trên chính một máy tính các nhân bìnhthường Có thể có nhiều chương server cùng làm một dịch vụ, chúng có thể nằm trênnhiều máy tính hoặc một máy tính Với mô hình trên chúng ta nhận thấy rằng mô hìnhclient/server chỉ mang đặc điểm của phần mềm không liên quan gì đến phần cứng mặc
dù trên thực tế yêu cầu cho một máy server là cao hơn nhiều so với máy client Lý do làbởi vì máy server phải quản lý rất nhiều các yêu cầu từ các clients khác nhau trên mạng
Ưu và nhược điểm chính Có thể nói rằng với mô hình client/server thì mọi thứ dườngnhư đều nằm trên bàn của người sử dụng, nó có thể truy cập dữ liệu từ xa (bao gồm cáccông việc như gửi và nhận file, tìm kiếm thông tin, ) với nhiều dịch vụ đa dạng mà môhình cũ không thể làm được Mô hình client/server cung cấp một nền tảng lý tưởng chophép tích hợp các kỹ thuật hiện đại như mô hình thiết kế hướng đối tượng, hệ chuyêngia, hệ thông tin địa lý (GIS) Một trong những vấn đề nảy sinh trong mô hình này đó
là tính an toàn và bảo mật thông tin trên mạng Do phải trao đổi dữ liệu giữa 2 máy ở 2khu vực khác nhau cho nên dễ dàng xảy ra hiện tượng thông tin truyền trên mạng bị lộ
Trang 41.2 Giao thức TCP
- Bộ giao thức TCP/IP, ngắn gọn là TCP/IP (tiếng Anh: Internet protocol suite hoặc IP suite hoặc TCP/IP protocol suite - bộ giao thức liên mạng), là một bộ các giao thức truyền thông cài đặt chồng giao thức mà Internet và hầu hết các mạng máy tính thương mại đang chạy trên đó Bộ giao thức này được đặt tên theo hai giao thức chính của nó là TCP (Giao thức Điều khiển Giao vận) và IP (Giao thức Liên mạng) Chúng cũng là hai giao thức đầu tiên được định nghĩa
- Như nhiều bộ giao thức khác, bộ giao thức TCP/IP có thể được coi là mộttập hợp các tầng, mỗi tầng giải quyết một tập các vấn đề có liên quan đến việc truyền
dữ liệu, và cung cấp cho các giao thức tầng cấp trên một dịch vụ được định nghĩa rõ ràng dựa trên việc sử dụng các dịch vụ của các tầng thấp hơn Về mặt lôgic, các tầng trên gần với người dùng hơn và làm việc với dữ liệu trừu tượng hơn, chúng dựa vào các giao thức tầng cấp dưới để biến đổi dữ liệu thành các dạng mà cuối cùng có thể được truyền đi một cách vật lý
- Mô hình OSI miêu tả một tập cố định gồm 7 tầng mà một số nhà sản xuất lựa chọn và nó có thể được so sánh tương đối với bộ giao thức TCP/IP Sự so sánh này có thể gây nhầm lẫn hoặc mang lại sự hiểu biết sâu hơn về bộ giao thức TCP/IP
1.3 Giao thức UDP:
- UDP (User Datagram Protocol) là một trong những giao thức cốt lõi của giao thức TCP/IP Dùng UDP, chương trình trên mạng máy tính có thể gởi những dữ liệu ngắn được gọi là datagram tới máy khác UDP không cung cấp sự tin cậy và thứ tự truyền nhận mà TCP làm; các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo Tuy nhiên UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian Do bản chất không trạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu
Trang 5- Những ứng dụng phổ biến sử dụng UDP như DNS (Domain Name System), ứngdụng streaming media, Voice over IP, Trivial File Transfer Protocol (TFTP), và game trực tuyến.
Chương 2. THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG
TRÌNH
Trang 6- Client gửi yêu cầu đến SERVER
- SERVER trả về thông tin tài nguyên
- Client xuất ra console
public class Net1 {
public static void main(String args[]){
try{
URL u=new URL("http://www.vnexpress.net:8080");
System.out.println("Name of the file is:"+ u.getFile());
System.out.println("Host name is:"+ u.getHost());
System.out.println("Port number is:"+ u.getPort());
System.out.println("Protocol type is:"+ u.getProtocol());
}catch(MalformedURLException e){
Trang 7Đề bài: Tạo ra 2 ứng dụng độc lập Ứng dụng đầu tiên nhận câu lệnh cho bảng
students có thuộc tính: name, id và age để thêm vào bảng Còn ứng dụng thứ hai thì in
ra màn hình thông tin từ bảng students ở trên
Add Student
Chức năng chương trình:
- Kết nối cơ sở dữ liệu
- Thêm một trường vào cơ sở dữ liệu
Get Students 1
Chức năng chương trình:
1
Trang 8- Kết nối CSDL
- Truy vấn
Cơ chế:
- Tạo kết nối đến Driver của hệ quản trị cơ sở dữ liệu
- Từ đó, thực thi câu lệnh truy vấn CSDL
public class AddStudent {
public static void main(String args[]){
Trang 9boolean temp=statement.execute("insert into students value('AnhTuan,'012','06t3'");
//boolean temp=statement.execute("insert into students value('"+ args[0] +
public class GetStudent {
public static void main(String args[]){
}catch(Exception e){
System.out.println("Connection with the DataBase failed");
e.printStackTrace();
Trang 112.1.3 NumberTCPSimple
Đề bài: Tạo ra hai ứng dụng độc lập (một client và một server) Client chấp nhận
một trong các số sau: 1, 2, 3 Số này sẽ được gửi đến server Server sẽ trả lại tươngứng : “ONE” hoặc “TWO” hoặc “THREE” (tùy theo số nhận được) Dùng giao thứcTCP/IP
Chức năng chương trình:
- Client gửi số bất kì đến SERVER
- Nếu là số 1,2,3 thì trả về ONE,TWO,THREE, các trường hợp còn lại trả vềUNKNOWN
Cơ chế:
- SERVER mở cổng để client truy xuất đến
- Tạo các luồng nhập xuất khi có client truy cập đến (cả client và SERVER),lúc này client và server có thể gửi thông tin qua lại lẫn nhau
- Client truy cập vào, sau đó gửi thông tin đến server
- Server nhận được thông tin, rồi xử lí, sau đó gửi trả lại client
- Client hiển thị thông tin mà server đã trả về
Các lớp và chức năng các lớp:
NumberTCPSimpleServer
- Lớp này có phương thức go(), chức năng của nó:
o Mở cổng của server, tạo kết nối mỗi khi có client kết nối
Trang 12o Chờ nhận dữ liệu từ Client gửi lên
o Tạo kết nối đến địa chỉ và số hiệu cổng của server
o Tạo các luồng nhập xuất liên kết với server
o Đưa dữ liệu cần gửi hoặc nhận vào các luồng này
o Gửi dữ liệu đến server
o Nhận dữ liệu (sau khi server đã xử lí) rồi hiển thị lên màn hình
public class NumbersTCPSimpleClient {
public static final int DT_PORT=1300;
String hostName;
Socket soc;
public static void main(String args[]){
NumbersTCPSimpleClient client=new NumbersTCPSimpleClient("localhost"); try{
Trang 13//creating an ObjectInputStream object
ObjectInputStream ois=new ObjectInputStream(is);
//creating an OutputStream that will be connect to soc
OutputStream os=soc.getOutputStream();
//creating an ObjectOutputStream object
ObjectOutputStream oos=new ObjectOutputStream(os);
//sending data to server
oos.writeObject(str);
System.out.println(str+" was sent");
//receive from server
public class NumbersTCPSimpleServer {
private ServerSocket sSoc;
public static final int PORT=1300;
public static void main(String args[]){
NumbersTCPSimpleServer server=new NumbersTCPSimpleServer();
Trang 14System.out.println("I stopped writing A Socket was instantiated");
//creating an OutputStream object
OutputStream os=soc.getOutputStream();
//creating an ObjectOutputStream object
ObjectOutputStream oos=new ObjectOutputStream(os);
//creating an InputStream object
InputStream is=soc.getInputStream();
//creating an ObjectInputStream object
ObjectInputStream ois=new ObjectInputStream(is);
Trang 16- Hiển thị thông tin toàn bộ trang web của bất kì trang web nào dưới dạng textđơn thuần
Cơ chế:
- Gửi địa chỉ URL
- Web server trả lại thông tin
- Truy xuất đến thông tin cần thiết và hiển thị
Các lớp và chức năng các lớp:
- Chỉ gồm một phương thức main:
o Liên kết đến URL với địa chỉ được nhập vào
o Sử dụng phương thức getContent() của đối tượng URL để nhận toàn
bộ nội dung của trang web
o Đọc toàn bộ nội dung và hiển thị lên màn hình
public class net1 {
public static void main(String args[]){
Trang 17Đề bài: Viết chương trình gửi đến URL một chuỗi, mở kết nối từ URL này và hiển
thị thông tin header
Chức năng chương trình:
- Mở kết nối đến địa chỉ URL
- Hiển thị thông tin các header nhận được
o Tạo URL kết nối đến địa chỉ nhập vào
o Mở kết nối (sử dụng phương thức openConnection của đối tượngURL)
o Lấy thông tin header (dùng phương thức getHeaderField,getHeaderFieldKey của đối tượng URLconnection)
o Hiển thị thông tin header
o In thông báo lỗi nếu có lỗi xảy ra
Trang 18public class net2 {
public static void main(String args[]){
Trang 192.2.3 Net3
Đề bài: Viết chương trình in ra địa chỉ của localhost (địa chỉ cục bộ), null host và
địa chỉ bất kì trên internet
Chức năng chương trình:
- Hiển thị thông tin về địa chỉ cục bộ, địa chỉ null và địa chỉ bất kì trên internet
Cơ chế:
Các lớp và chức năng các lớp:
- Tạo đối tượng InetAddress
- Sử dụng phương thức getLocalHost() để lấy thông tin về địa chỉ cục bộ vàhiển thị nó
- Sử dụng phương thức getByName(null) để lấy thông tin về địa chỉ null vàhiển thị nó
- Sử dụng phương thức getByName(URL) để lấy thông tin về địa chỉ URL củamột website và hiển thị nó
- Hiện thị lỗi nếu có
public class net3 {
public static void main(String args[]){
Trang 20Kết quả:
2.2.4 Net4
Đề bài: Viết chương trình mở kết nối dùng đối tượng URL và kiểm tra các thuộc
tính và nội dung của tài nguyên nhận được
public class net4 {
public static void main(String args[])throws IOException{
Trang 21System.out.println("Last Modified: "+u.getLastModified());
Đề bài:Viết ứng dụng để minh họa gửi dữ liệu đến server và client xử lí nó
Ví dụ hai chương trình độc lập chạy trên JAVA: chương trình client và chương trìnhserver Chương trình client thực thi một lớp KnockKnockClient Chương trình serverthực thi hai lớp: KnockKnockServer và KnockKnockProtocol KnockKnockServerchứa phương thức main cho chương trình server và mở cổng, kết nối và đọc, gửi dữ liệuđến socket, còn KnockKnockProtocol xử lí jokes Nó theo dõi các joke hiện tại, trạngthái hiện tại (gửi knock knock, gửi clue, v.v…) và trả về giá trị khác nhau của joke củatrạng thái hiện tại Đối tượng thực thi giao thức xác đinh – ngôn ngữ giao tiếp giữaclient và server
Chức năng chương trình:
Trang 22- Một chương trình vui nhộn, trao đổi thông điệp client-server qua lại lẫn nhau,tựa như chat hoặc game
Cơ chế:
- Dùng cơ chế client/server để gửi nhận thông điệp
Các lớp và chức năng các lớp:
- Khi client và server kết nối với nhau thì Server sẽ hiển thị “Knock!Knock!”
- Nếu người sử dụng gửi “Who’s there?”, server sẽ gửi tên hiện tại của người
đó trong chuỗi clues với chỉ số là currentJoke là chỉ số của người hiện tại
- Nếu tiếp tục gửi tên của người hiện tại + who? (Tức là hỏi họ là ai), thì nókết hợp với chuỗi answers để trả lời cho client
- Server sẽ hỏi có muốn tiếp tục không, nếu client đồng ý thì nó sẽ chuyển đếnngười tiếp theo là người hiện hành, cứ như vậy cho đến khi người sử dụngkhông muốn tiếp tục nữa
public class KnockKnockServer {
public static void main(String args[])throws IOException{
Trang 23PrintWriter out=new PrintWriter(clientSocket.getOutputStream(),true);
BufferedReader in=new BufferedReader(newInputStreamReader(clientSocket.getInputStream()));
public class KnockKnockProtocol {
private static final int WAITING=0;
private static final int SENTKNOCKKNOCK=1;
private static final int SENTCLUE=2;
private static final int ANOTHER=3;
private static final int NUMJOKES=5;
private int state=WAITING;
private int currentJoke=0;
private String []clues={"Turnip","Little Old Lady","Atch","Who","Who"};
private String []answers={"Turnip the heat, it's cold in here!","I didn't know youcould yodel!","Bless you!","Is there an owl in here?","Is there an echo in here?"}; public String processInput(String theInput){
String theOutput=null;
if(state==WAITING){
Trang 25public class KnockKnockClient {
public static void main(String args[])throws IOException{
Trang 26- Tham gia vào group của multicast
- Gửi dữ liệu đến địa chỉ multicast
- Nhận dữ liệu từ multicast
Trang 27- Hiển thị lên màn hình
- Chỉ cần các client tham gia vào group của địa chỉ multicast này thì khi có dữliệu được gửi vào đó thì tất cả client đều nhận được
Cơ chế:
- Tham gia vào group của địa chỉ multicast
- Gửi dữ liệu đến địa chỉ multicast (Lúc này các client muốn nhận được thìphải tham gia vào group của multicast đó thì mới nhận được)
- Vì trong chương trình cũng tham gia vào group multicast nên nó cũng sẽnhận được dữ liệu khi có client gửi vào địa chỉ này
Các lớp và chức năng các lớp:
- Chạy chương trình gồm 2 đối số: đối số đầu tiên và dữ liệu cần gửi đi, đối sốthứ 2 là địa chỉ multicast
- Chỉ gồm một phương thức main():
- Tạo cổng liên kết đến multicast
- Tham gia vào group multicast
- Chuyển đối số thứ nhất thành mảng byte, rồi tạo đối tượng DatagramPacket
để gửi dữ liệu đi (gọi phương thức send của đối tượng DatagramPacket)
- Gọi phương thức receive để nhận dữ liệu từ địa chỉ multicast
- Rời khỏi nhóm multicast để không nhận dữ liệu từ địa chỉ này nữa
public class MulticasPeer {
public static void main(String args[]){