1. Trang chủ
  2. » Công Nghệ Thông Tin

đồ án cơ sở Ngành Mạng

32 337 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 1,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sự kết hợp của hai phần này tạo ra một trải nghiệm lập trình rất đặc biệt cho sinh viên, để hình dung được cái nhìn tổng quát của một hệ thống điển hình.. PHẦN 1: ĐỒ ÁN MẠNG1.1 GIỚI THI

Trang 1

MỞ ĐẦU

Lập trình mạng và hệ điều hành là những kiến thức tối quan trọng trong hành trang của sinh viên chuyên ngành công nghệ thông tin Có thể nói rằng đây là hai khía cạnh rất đặc biệt vì một bên ở mức khá cao còn một bên ở mức khá thấp Sự kết hợp của hai phần này tạo ra một trải nghiệm lập trình rất đặc biệt cho sinh viên,

để hình dung được cái nhìn tổng quát của một hệ thống điển hình.

Báo cáo này trình bày cho những gì em đã học được và vẫn dụng vào đồ án trong

kì này, với sự hướng dẫn của GVHD em sẽ cắt và giản, trình bày gọn gang, súc tích qua những đoạn mã và hình ảnh chạy chương trình tập trung vào những gì em hiểu được và sẽ ghi vào báo cáo này

Tuy em đã làm cẩn thận nhưng sẽ còn những sai sót không không muốn, em rất mong sự góp ý của quý thầy cô trong khoa để em rút kinh nghiệm.

Mọi hình ảnh, mã nguồn trong báo cáo đều do bản thân em tự làm, không sao chép toàn bộ từ bất cứ nguồn nào.

Em xin chân thành cảm ơn.

Đà Nẵng, tháng 05 năm 2017.

Sinh viên

Nguyễn Đình Phát

Trang 2

MỤC LỤC

PHẦN 1: ĐỒ ÁN MẠNG 3

1.1 GIỚI THIỆU 3

1.2 CƠ SỞ LÍ THUYẾT 3

1.2.1 Lí thuyết mạng máy tính 3

1.2.2 Mô hình Client-Server 3

1.2.3 Ngôn ngữ Java và lập trình socket 4

1.3 PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT 6

1.3.1 Sơ đồ hoạt động của hệ thống 6

1.4 MÃ NGUỒN CHƯƠNG TRÌNH 7

1.4.1 Client Java 7

1.4.2 Client.java 9

1.4.3 Server Java 12

1.4.4 Server.java 15

1.4.5 FileEvent.java 17

1.5 KẾT LUẬN 19

1.5.1 Kết quả chạy thực tế 19

1.5.2 Kết luận 21

1.6 TÀI LIỆU THAM KHẢO 22

2 PHẦN 2: ĐỒ ÁN HỆ ĐIỀU HÀNH 23

2.1 GIỚI THIỆU 23

2.2 CƠ SỞ LÍ THUYẾT 23

2.2.1 Tổng quan Hook trong Windows 23

2.2.2 Chức năng của Hook 23

2.2.3 Ngôn ngữ C++ và thư viện liên kết động DLL Error! Bookmark not defined. 2.2.4 Lý thuyết về WH_KEYBOARD_LL 24

2.3 PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT 25

2.3.1 Sơ đồ hoạt động của hệ thống 25

Trang 3

2.3.2 Giải thuật xây dựng các bước 25

2.4 MÃ NGUỒN CHƯƠNG TRÌNH 26

2.5 KẾT LUẬN 29

2.5.1 Kết quả chạy thực tế 29

2.5.2 Kết luận 30

2.6 TÀI LIỆU THAM KHẢO 30

Trang 4

PHẦN 1: ĐỒ ÁN MẠNG

1.1 GIỚI THIỆU

Đề Tài Mạng: Truyền Tải Tập Tin Qua Mạng Sử Dụng Socket

Viết chương trình theo mô hình Client-Server (sử dụng TCP hoặc UDP), trong

đó Client cung cấp giao diện cho người dùng tương tác với chương trình, Client cung cấp địa chỉ File được gởi còn Server thực hiện lưu file được nhận vào trong địa chỉ trong Server.

1.2 CƠ SỞ LÍ THUYẾT

1.2.1 Lí thuyết mạng máy tính

Mạng máy tính là tập hợp các máy tính độc lập, kết nối với nhau thông qua các đường truyền vật lý và cùng tuân thủ một nguyên tắc truyền thông nào đó Mạng phải có giao thức - là một tập hợp các quy tắc chuẩn dành cho việc biểu diễn dữ liệu, phát tín hiệu, chứng thực và phát hiện lỗi dữ liệu, nhờ đó mà các máy tính có thể kết nối và trao đổi thông tin với nhau một cách tin cậy, thậm chí trên các đường truyền không được hoàn hảo Một số giao thức như: TCP/IP, UDP, HTTP, FTP, SMTP, POP3,…

Có rất nhiều tiêu chí để phân loại mạng máy tính, có thể dựa vào loại máy kết nối, có thể dựa vào đặc điểm đường truyền và cũng có thể dựa vào nguyên tắc truyền thông như: WAN, LAN, GAN, Intranet, Internet.

Theo đó cũng có nhiều mô hình mạng khác nhau như mạng tuyến tính (bus), mạng hình sao (star), mạng hình vòng (ring) Mạng máy tính có thể được khai thác

dựa vào 2 mô hình ứng dụng chính: mô hình mạng ngang hàng (P2P) và mô hình khách-chủ (Client-Server) Phạm vi đề tài chính là thực hiện trên mô hình Client-

Server.

1.2.2 Mô hình Client-Server

Mô hình client-server là một mô hình nổi tiếng trong mạng máy tính, được áp dụng rất rộng rãi và là mô hình của mọi trang web hiện có Ý tưởng của mô hình này là máy khách gửi một yêu cầu (request) để máy chủ, máy chủ sẽ xử lý và trả kết quả về cho máy khách (response) Trong này một Server có thể phục vụ rất nhiều Client.

Trang 5

1.2.3 Ngôn ngữ Java và lập trình socket

Java là một ngôn ngữ lập trình hướng đối tượng, ra mắt năm 1991 bởi Sun Microsystems với cú pháp lấy cảm hứng từ ngôn ngữ C++ trước đó Chương trình Java có tính tương thích cao với nhiều hệ thống do mã nguồn được biên dịch thành

mã trung gian byte-code và chạy trên bất cứ hệ thống nào hỗ trợ môi trường thực thi (runtime environment) cho nó Ban đầu Java cũng có tính ỳ ạch nhưng những bản cập nhật sau đã cải thiện tốc độ nó ngang tầm với Python, PHP cho nên gần đây Java đang nổi lên như một hiện tượng trong giới lập trình.

Java hỗ trợ lập trình mạng, gói java.net của J2SE API chứa một tập hợp các

classes và interfaces khá chi tiết về giao tiếp tầm thấp, cho phép viết các chương

trình và giải quyết vấn đề một cách nhanh chóng Nó hỗ trợ hai giao thức mạng phổ

biến TCP/IP và UDP và giao tiếp nhau thông qua Socket.

Trang 6

Các Socket cung cấp kĩ thuật giao tiếp giữa hai máy tính sử dụng TCP Một chương trình Client tạo một socket trên đầu-cuối của giao tiếp và cố gắng để kết nối socket đó tới một Server Khi kết nối được tạo, Server tạo một đối tượng Socket trên đầu cuối của giao tiếp Client và Server bây giờ có thể giao tiếp bằng việc đọc

Server khai báo một đối tượng ServerSocket, biểu thị số hiệu cổng (port) nào để

xuất hiện giao tiếp.

Server gọi phương thức accept() của lớp ServerSocket Phương thức này đợi tới

khi một Client kết nối với Server trên cổng đã cho.

Trong khi Server đang đợi, một Client khởi tạo một đối tượng Socket, xác định

tên Server và số hiệu cổng để kết nối tới Nếu giao tiếp được thành lập, bây giờ Client có một đối tượng Socket có khả năng giao tiếp với Server Trên phía Server,

phương thức accept() trả về một tham chiếu tới một socket mới trên Server mà được

kết nối với Socket của Client.

Sau khi các kết nối được thành lập, giao tiếp có thể xảy ra bởi sử dụng I/O

stream Mỗi Socket có cả một OutputStream và InputStream OutputStream của

Trang 7

Client được kết nối với InputStream của Server, và InputStream của Client được kết nối với OutputStream của Server.

1.3 PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT

1.3.1 Sơ đồ hoạt động của hệ thống

Client Server

Trang 8

private void initComponents() {

jLabel1 = new javax.swing.JLabel();

text = new javax.swing.JTextField();

jLabel2 = new javax.swing.JLabel();

button_truyen = new javax.swing.JButton();

button_reset = new javax.swing.JButton();

jButton1 = new javax.swing.JButton();

{

jButton1ActionPerformed(evt);

}

});

Trang 9

javax.swing.GroupLayout layout = new

Trang 10

private javax.swing.JButton button_reset;

private javax.swing.JButton button_truyen;

private javax.swing.JButton jButton1;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JTextField text;

public class Client {

private DatagramSocket socket = null;

static int part_number = 0;

static int MAX_BUFFER_SIZE = 63488;//; // 62*1024

static boolean finish = false;

static long offset = 0;

public void setSocket(DatagramSocket socket) {

this.socket = socket;

}

public void setSourceFilePath(String sourceFilePath) {

this.sourceFilePath = sourceFilePath;

Trang 11

}

public void setDestinationDirectory(String destinationPath) {

this.destinationPath = destinationPath;

}

private FileEvent event = null;

private String sourceFilePath = "D:\\\\FileClient\\\\zshop.png"; private String destinationPath = "D:\\\\FileClient\\\\zshop.png"; private String hostName = "localhost";

public Client() {

}

public void createConnection() {

try {

socket = new DatagramSocket();

InetAddress IPAddress = InetAddress.getByName(hostName); byte[] incomingData = new byte[1024];

byte[] data = outputStream.toByteArray();

DatagramPacket sendPacket = new DatagramPacket(data, data.length, IPAddress, 9876);

Trang 12

socket.receive(incomingPacket);

String response = new String(incomingPacket.getData());

System.out.println("phan hoi tu server:" + response);

public FileEvent getFileEvent() {

FileEvent fileEvent = new FileEvent();

/*check size of the file*/

if(filelength < MAX_BUFFER_SIZE ) //file is small

Trang 13

// file is larger than maximun transport datagram, need tosplit

// debug

System.out.println("[READ] fileEvent.getFilename : " + fileEvent.getFilename());

//System.out.println("[READ] FileEvent.getFileData : " +fileEvent.getFileData());

Trang 14

return fileEvent;

}

public static void main(String[] args) {

Client client = new Client();

private void initComponents() {

jLabel1 = new javax.swing.JLabel();

button_khoidong = new javax.swing.JButton();

jButton1 = new javax.swing.JButton();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jTextField1 = new javax.swing.JTextField();

Trang 16

private javax.swing.JButton button_khoidong;

private javax.swing.JButton jButton1;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JTextField jTextField1;

}

1.4.4 Server.java

package DoAn;

import static DoAn.Client.MAX_BUFFER_SIZE;

import static DoAn.Client.offset;

Trang 17

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.StandardOpenOption;

import static java.nio.file.StandardOpenOption.APPEND;

import static jdk.nashorn.internal.objects.NativeString.substring;

public class Server {

static int stt;

private DatagramSocket socket = null;

private FileEvent fileEvent = null;

private String filecoppy;

public void setFilecoppy(String filecoppy) {

socket = new DatagramSocket(9876);

byte[] incomingData = new byte[1024 * 1000 * 50];

ObjectInputStream is = new ObjectInputStream(in);

fileEvent = (FileEvent) is.readObject();

if ( fileEvent.getStatus().equalsIgnoreCase("end")){ addfile();

System.out.println("ADD FILE");

InetAddress IPAddress = incomingPacket.getAddress(); int port = incomingPacket.getPort();

String reply = "Thank you for the message";

byte[] replyBytea = reply.getBytes();

System.out.println("Some issue happened while

packing the data @ client side");

Trang 18

public void addfile() throws IOException{

String fileName = fileEvent.getFilename();//lay phan dau cua ten file

int tongfile=(int)fileEvent.getFileSize();//lay tong se file

String outputFile = fileEvent.getDestinationDirectory();

File namefile = new File(name);

int dai=(int) namefile.length();//do dai cua file noi

byte[] fileBytes = new byte[dai];

FileInputStream fiSteam = new FileInputStream(namefile);

DataInputStream diStream = new DataInputStream(fiSteam);

int a=diStream.read(fileBytes,0, (int) namefile.length());

System.out.println("so byte doc duoc"+a);

Files.write(path, fileBytes, APPEND);

}

System.out.println(fileEvent.getFilename() + " length " +

fileEvent.getFilename().length());

try {

Trang 19

File dstFile = new File(outputFile);

FileOutputStream fileOutputStream = null;

fileOutputStream = new FileOutputStream(dstFile);

public static void main(String[] args) {

Server server = new Server();

private static final long serialVersionUID = 1L;

private String destinationDirectory;

private String sourceDirectory;

private String filename;

private long fileSize;

private byte[] fileData;

private String status;

public String getDestinationDirectory() {

Trang 20

public long getFileSize() {

Trang 21

1.5 KẾT LUẬN

1.5.1 Kết quả chạy thực tế

Hình 1: Gui_Server

Hình 2: Gui_Client

Trang 22

Hình 3: Thông báo kết nối Thành Công

Hình 4: Các thông báo truyền file

Hình 5: Kết quả truyền file 3gp và file png

1.5.2 Kết luận

Chương trình thực hiện được yêu cầu của đề tài là truyền file qua mạng qua socket sử dụng giao thức UDP.

Trang 23

Hệ thống hoạt động ổn định, Chương trình chạy ổn định.

Giao diện đơn giản, đặc trưng dễ sử dụng.

Trang 24

1.6 TÀI LIỆU THAM KHẢO

[1] https://vi.wikipedia.org/wiki/Mạng_máy_tính

[2] https://vi.wikipedia.org/wiki/Client-server

[3] https://daynhauhoc.com/t/lap-trinh-socket-chuong-trinh-truyen-file-don [4] Tài Liệu Lập Trình Mạng của khoa CNTT.

Trang 25

2.2 CƠ SỞ LÍ THUYẾT

2.2.1 Tổng quan Hook trong Windows

Hook là một cơ chế mà một ứng dụng có thể chặn các sự kiện, như các thông điệp, thao tác chuột, bàn phím Hàm dùng để chặn một loại sự kiện riêng

biệt được gọi là hook procedure/ Hook function Mỗi khi nhận được sự kiện,

hook proceduce có thể thay đổi và thậm chí hủy bỏ các sự kiện đó.

Có nhiều loại hook (như chuột, bàn phím) và hệ điều hành luôn duy trì một danh sách các hook procedure cho mỗi loại đó Mỗi danh sách các Hook

procedure này được gọi là hook chain Bản chất của hook chain là một dãy các

con trỏ hàm trỏ đến các Hook procedure nhiều loại hook (như chuột, bàn phím)

và hệ điều hành luôn duy trì một danh sách các hook procedure cho mỗi loại đó.

Mỗi danh sách các Hook procedure này được gọi là hook chain Bản chất của

hook chain là một dãy các con trỏ hàm trỏ đến các Hook procedure.

2.2.2 Chức năng của Hook

- Bắt và giả lập các thông điệp bàn phím, chuột

- Cung cấp chức năng Help (F1) cho ứng dụng

Trang 26

C++, một ngôn ngữ lập trình hướng đối tượng quá nổi tiếng được nâng cấp từ ngôn ngữ C trước đó C++ mạnh mẽ và linh động, thích hợp để viết các chương trình yêu cầu tốc độ xử lí cao hoặc giao tiếp phần cứng Như vậy việc tương tác với

hệ điều hành, mà ở phạm vi đề tài là truy cập các tệp tin trên đĩa thì C++ rất thích hợp.

DLL (Dynamic Link Library) là một thư viện liên kết động File DLL chứa những chỉ lệnh mà các chương trình khác có thể gọi đến để làm một tác vụ nào đó.

Về cơ bản, DLL cũng giống như EXE, tuy nhiên các file này được đặt tên khác nhau trong quá trình liên kết Sử dụng DLL sẽ tiết kiệm bộ nhớ khi chương trình trở

nên lớn và phức tạp, tăng tính sử dụng lại và đặc biệt là tạo ra khả năng tương tác giữa các ngôn ngữ lập trình khác nhau.

2.2.3 Lý thuyết về WH_KEYBOARD_LL

1 Chương trình cần dùng các hàm

SetwindowHookEx và UnHookWindowHookEx

2 Hook cục bộ (Thread hook) phân loại theo phạm vi.

hàm giám sát được cài đặt sau thông điệp ứng dụng chỉ kiểm soát tiến trình trong một ứng dụng cụ thể nào đó được xác định lúc cài đặt

5 Thủ tục được gọi bởi hệ điều hành gọi là CallBack

PHÂN TÍCH VÀ THIẾcT KẾc GIA\I THUẬT

Trang 27

1.6.1 Sơ đồ hoạt động của hệ thống

Sơ đồ hoạt động tổng quát của hệ thống

1.6.2 Giải thuật xây dựng các bước

Bước 1: tạo file DLL chứa hàm lọc Mọi hàm lọc đềBu có dạng như sau:LRESULT CALLBACK (int nCode, WPARAM wParam, LPARAM lParam)Bền trong hàm lọc chúng ta có thề\ tùy ý làm đu\ chuyện trời đẫct Tuy nhiền, pha\ituẫn thu\ theo một sốc nguyền tắct sau:

- Nềcu nCode < 0 thì khống được làm gì mà pha\i gọi ngay hàm

CallNextHookE) (sẽ trình bày sau) và tra\ vềB giá trị return bở\i nó

- Nềcu có xư\ lý ít nhiềBu thì hàm lọc pha\i tra\ vềB giá trị khác 0

Bước 2: tạo chưởng trình cài đặt Hook Chưởng trình này sư\ dụng 3 hàmAPI sau đẫy đề\ “móc” hàm lọc vào các sự kiện:

+ lpfn : địa chỉ\ hàm lọc mà ta muốcn gắcn với hook

+ hMod : handle cu\a module chứa hàm lọc (là handle cu\a file DLL trongtrường hợp Hook toàn cục)

+ dwThreadID : định danh cu\a thread ứng với hook đang được cài đặt (nềcu = 0 thì Hook có phạm vi toàn hệ thốcng và bao ha\m ca\ mọi thread đang tốBn tại)

b) Hàm gỡ bo\ một hàm lọc

BOOL UnhookWindowsHookEx(HHOOK hHook)Tham sốc:

+ hHook: handle cu\a hook cẫBn gỡ bo\ (chính là giá trị được tra\ về\ bở\i

Ngày đăng: 25/08/2017, 22:08

TỪ KHÓA LIÊN QUAN

w