Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 65 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
65
Dung lượng
2,42 MB
Nội dung
Mục lục Mục lục .1 LỜI CẢM ƠN .Error! Bookmark not defined Mở Đầu .3 Tính cấp thiết đề tài .3 Mục đích phương pháp nghiên cứu đồ án Bố cục đồ án Chương I .5 BẢO MẬT THÔNG TIN 1.1 Bảo mật thông tin tầm quan trọng .5 1.2 Sơ lược lịch sử mật mã 1.3 Phân loại hệ mật mã 1.4 Tiêu chuẩn đánh giá hệ mật mã .10 1.4.1 Độ an toàn .11 1.4.2 Tốc độ mã hóa giải mã 12 1.4.3 Phân phối khóa 12 1.5 Cơ sở toán học 13 1.5.1 Lý thuyết thông tin 13 1.5.2 Lý thuyết độ phức tạp 15 1.5.3 Lý thuyết toán học 20 1.5.4 Các thuật toán kiểm tra số nguyên tố 21 1.6 Hệ mật mã RSA .21 1.6.1 Mô tả thuật toán .22 1.6.2 Thuật toán 22 1.7 Chuẩn mã liệu DES 23 1.7.1 Giới thiệu chung DES 23 1.7.2 Mô tả thuật toán 24 1.7.3 Giải mã DES 36 1.7.4 Sự an toàn DES 37 1.7.5 DES thực tế 38 Chương II 39 BẢO MẬT TRONG JAVA VÀ MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP NETBEAN 39 2.1 Giới thiệu Java 39 2.2 Lý chọn Java 39 2.2.1 Đơn giản 40 2.2.2 Hướng đối tượng .40 2.2.3 Độc lập phần cứng hệ điều hành .40 2.2.4 Mạnh mẽ 40 2.2.5 Bảo mật 41 2.2.6 Phân tán 41 2.2.7 Đa luồng 41 2.2.8 Động 41 2.3 Dịch thực thi chương trinh Java 42 2.4 Máy ảo Java 42 2.5 Lập trình hướng đối tượng Java Error! Bookmark not defined 2.5.1 Lớp (class) Error! Bookmark not defined 2.5.2 Hàm - Phương thức lớp (Method) Error! Bookmark not defined 2.5.3 Khởi tạo đối tượng (Constructor) .Error! Bookmark not defined 2.5.4 Tính kế thừa Error! Bookmark not defined 2.6 Luồng tập tin Error! Bookmark not defined 2.7 Dòng Vào/Ra liệu (I/O Streams) 43 2.7.1 Các dòng (Streams) 43 2.7.2 Gói Java.io .44 2.8 Các công cụ bảo mật Java 48 2.8.1 Java Cryptography Extension (JCE) 48 2.8.2 Các lớp Engine 49 2.9 Lập trình Socket với Java 50 2.9.1 Định nghĩa: 50 2.9.2 Các thuộc tính Socket 52 2.9.3 Các hàm thông dụng Socket 53 2.10 Môi trường phát triển tích hợp NetBeans .58 2.10.1 NetBeans Profiler 59 2.10.2 Giao diện thiết kế công cụ 59 2.10.3 NetBeans JavaScript Editor 59 2.10.4 Lý chọn Netbean 59 2.10.5 Sử dụng Netbean 60 Chương III .65 XÂY DỰNG CHƯƠNG TRÌNH MÃ HÓA ỨNG DỤNG TRONG TRUYỀN FILE 65 Mở Đầu Tính cấp thiết đề tài Bảo mật bảo đảm an toàn thông tin liệu vấn đề thời chủ đề rộng có liên quan đến nhiều lĩnh vực thực tế có nhiều phương pháp thực để bảo vệ an toàn thông tin liệu ngày với phát triển nhanh chóng hệ thống thông tin mạng nguy xâm nhập vào hệ thống thông tin, mạng liệu ngày tăng Vấn đề bảo mật nhiều người tập trung nghiên cứu tìm giải pháp để đảm bảo an toàn, an ninh cho hệ thống phần mềm.Việc bảo mật cho hệ thống thực theo nhiều phương diện, nhiều tầng khác nhau, bao gồm từ phương diện kiểm soát truy nhập vật lý vào hệ thống, thực sửa chữa, cập nhật , nâng cấp hệ điều hành vá lỗ hổng an linh Thật vậy, cần phải hiểu hệ thống thông tin bảo mật 100% Bất kì hệ điều hành mà sử dụng có lỗ hổng an ninh chưa phát Bộ phận quản trị mạng không phát nhanh xâm nhập trái phép làm hư hỏng, chí phá hủy thông tin người sử dụng Như yêu cầu cấp thiết đặt phải có giải pháp tối ưu cho toán bảo mật mã hóa thông tin có lẽ giải pháp tối ưu Từ thập niên gần đây, bước vào kỷ nguyên máy tính, nhiều lĩnh vực khác, lĩnh vực mật mã có chuyển biến to lớn từ giai đoạn mật mã truyền thống sang giai đoạn mật mã máy tính máy tính điện tử sử dụng ngày phổ biến việc lập mật mã, giải mật mã, chuyển biến kích thích việc nghiên cứu giải pháp mật mã, biến việc nghiên cứu mật mã thành khoa học có đối tượng ngày rộng lớn sử dụng có hiệu nhiều phạm vi hoạt động sống Chính từ yêu cầu su hướng phát triển mà chọn đề tài “Cài đặt toán mã hóa Java ứng dụng truyền File” với mục đích nhằm giải phần toán bảo mật truyền liệu Tôi xin cam đoan nội dung trình bầy đồ án chép từ nội dung đồ án khác sản phẩm đồ án nghiên cứu xây dựng nên Mục đích phương pháp nghiên cứu đồ án Xây dựng chương trình mã hóa thông tin trình truyền liệu đảm bảo tính bí mật thông tin truyền tính toàn vẹn thông tin nhận được, đảm bảo thời gian mã hóa giả mã phạm vi cho phép, đáp ứng khả phần cứng tốc độ truyền liệu mức cho phép Để đảm bảo điều trình làm đề tài nghiên cứu theo hướng sau : - nghiên cứu thuật toán mã hóa chuẩn mã hóa giới sử dụng đánh giá tính khả thi.lựa trọn phương pháp mã hóa phù hợp với yêu cầu toán - Tìm hiểu, nghiên cứu phương pháp truyền file phổ biến sử dụng, tốc độ truyền liệu cho phép người dùng chấp nhận - Tìm hiểu khả đáp ứng phần cứng thuật toán mã hóa điều kiện nước ta để đưa giải pháp mã hóa phù hợp - Lựa trọn ngôn ngữ lập trình phù hợp với yêu cầu đặt Bố cục đồ án Đồ án gồm phần mở đầu, chương nội dung, phần kết luận phần tài liệu tham khảo cấu trúc sau: Chương I : Giới thiệu bảo mật thông tin tính cấp thiết bảo mật thông tin Chương II : Giới thiệu ngôn ngữ Java, gói bảo mật Java, môi trường phát triển tích hợp Netbean Chương III : Ứng dụng cài đặt toán mã hóa trình truyền File Chương I BẢO MẬT THÔNG TIN 1.1 Bảo mật thông tin tầm quan trọng Thông tin (Information) tài sản quan trọng khác doanh ngiệp, tổ chức, cá nhân Thông tin tồn nhiều dạng khác nhau, dạng chia sẻ, lưu trữ cần bảo vệ Bảo mật thông tin bảo đảm cho thông tin tránh đe dọa mát, đánh cắp thông tin…Bảo mật thông tin phải đảm bảo yêu cầu sau : + Tính bảo mật : thông tin phải bảo vệ tránh xâm nhập trái phép + Tính toàn vẹn liệu : phải giám sát thay đổi thông tin tránh tránh mát, sai lệnh thông tin + Tính sẵn sàng : Thông tin bảo vệ đảm bảo việc truy cập dễ dàng người phép truy cập + Đúng pháp luật : thông tin tập hợp sử lý sử dụng quy định pháp luật Những nguyên nhân dẫn đến việc an toàn thông tin : + Lỗi người : 52%, kẻ sấu :10%, hỏa hoạn : 15%, lũ lụt: 10%, khũng bố: 3% + Các loại tội phạm máy tính: ăn trộm tiền: 44%, phá hủy phần mềm: 16%, trộm thông tin: 16%, thay đổi liệu: 12%, công dịch vụ: 10%, xâm phạm đời tư : 2% Vi phải bảo mật thông tin ? Ngày với phát triển mạnh mẽ khoa học kỹ thuật, công nghệ thông tin ứng dụng vào hầu hết lĩnh vực đời sống doanh nghiệp, ngân hàng, trường học…các thông tin khách hàng, chiến lược kinh doanh …đều lưu trữ trao đổi thông qua công nghệ vi tính truyền thông Vì mà khả rui trình truyền tin lớn Ví dụ ngân hàng thông tin khách hàng bị đánh cắp đồng nghĩa với tài khoản ngân hàng khách hàng bị đánh cắp gây thiệt hại lớn cho ngân hàng khách hàng họ thông tin cần phải bảo mật tránh truy cập trái phép Làm để có sách bảo mật tốt ? + Biết quy trình liệu cấn bảo vệ + Nhận biết mối đe dọa, phán đoán ảnh hưởng chúng + Tính toán rủi ro định rủi ro chấp nhận + Đưa chiến lược nhằm giảm thiểu rủi ro đến mức chấp nhận + Thực hiện, kiểm tra điều chỉnh chiến lược 1.2 Sơ lược lịch sử mật mã Từ người có nhu cầu trao đổi thông tin, thư từ cho nhu cầu giữ bí mật bảo vệ tính riêng tư thông tin, thư từ trao đổi nảy sinh Như ta thấy nhu cầu sử dụng mật mã xuất từ sớm, người biết trao đổi truyền đưa thông tin cho nhau, đặc biệt thông tin thể hình thức ngôn ngữ, thư từ lịch sử cho ta biết, hình thức mật mã sơ khai tìm thấy từ khoảng bốn nghìn năm trước văn minh Ai cập cổ đại trải qua hàng nghìn năm lịch sử, mật mã sử dụng rộng rãi khắp giới từ Đông sang Tây để giữ bí mật cho việc giao lưu thông tin nhiều lĩnh vực hoạt động người quốc gia, đặc biệt lĩnh vực quân sự, trị, ngoại giao Mật mã trước hết loại hoạt động thực tiễn, nội dung để bí mật thông tin (chẳng hạn dạng văn bản) từ người gửi A đến người nhận B, A phải tạo cho văn mã mật tương ứng, thay gửi văn rõ A gửi cho B mã mật, B nhận mã mật có cách từ khôi phục lại văn dõ để hiểu thông tin mà A muốn gửi cho Vì gửi thường chuyển qua đường công khai nên người “lấy trộm” được, mật mã nên không đọc hiểu được, A tạo mã mật B gải mã mật thành rõ để hiểu hai người có thỏa thuận Chìa khóa chung, thực tiễn, có hoạt động bảo mật có hoạt động ngược lại khám phá bí mật từ mã mật “lấy trộm ” được, ta thường gọi hoạt động thám mã, hoạt động quan trọng không hoạt động bảo mật Vì thuật toán lập mật mã giải mã không thiết bí mật, nên mã thám thường tập trung vào việc tìm khóa mật mã, có người gọi công việc phá khóa Suốt nghìn năm lịch sử, thông báo, thư từ truyền đưa trao đổi với thường văn bản, tức có dạng dãy ký tự ngôn ngữ Vì vậy, thuật toán lập mật mã thường đơn giản thuật toán sáo trộn, thay đổi ký tự xác định phép chuyển dịch, thay hay hoán vị ký tự bảng ký tự ngôn ngữ tương ứng khóa mật mã thông tin dùng để thực phép lập mật mã giải mã Ngày mật mã chưa phải khoa học,do chưa có nhiều kiến thức sách để lại, nhiên hoạt động bảo mật thám mã lịch sử đấu tranh trị, ngoại giao quân phong phú, mật mã có nhiều tác động quan trọng đưa đến kết nhiều có ý nghĩa định đấu tranh Do thời gian dài thân hoạt động mật mã xem bí mật, nên tài liệu kỹ thuật mật mã phổ biến đến thường ghi lại kiến thức kinh nghiệm, có vài “phát minh” hệ mật mã Vigenere vào kỷ 16 hệ mã Hill đời năm 1929 hệ mã thực phép chuyển dịch (đối với mã Vigenere) hay phép thay (mã Hill) đồng thời nhóm ký tự ký tự riêng rẽ Vấn đề thám mã, ngược lại, thành công thường đưa đến cống hiến trội ấn tượng tình gay cấn đấu tranh, thường đòi hỏi nhiều tài phát với kinh nghiệm suy luận tinh tế Bước sang kỷ 20, với tiến liên tục kỹ thuật tính toán truyền thông, nghành mật mã có tiến to lớn Vào thập niên đầu kỷ, phát triển kỹ thuật biểu diễn, truyền sử lý tín hiệu có tác động giúp cho hoạt động lập giải mật mã từ thủ công chuyển sang giới hóa điện tử hóa Các văn bản, mật mã trước viết ngôn ngữ thông thường viết kỹ thuật số thành dãy tín hiệu nhị phân, tức dãy bit, phép biến đổi dãy ký tự chuyển thành phép biến đổi dãy bit, hay dãy số, việc thực phép lập mã, giải mã trở thành việc thực hàm số số học Toán học kỹ thuật tính toán bắt đầu trở thành công cụ cho việc phát triển khoa học mật mã Khái niệm trung tâm khoa học mật mã khai niệm Bí mật Đó khái niệm phổ biến đời sống Khái niệm bí mật ban gắn với khái niệm ngẫu nhiên, sau thập niên gần đây, với khái niệm Phức tạp , cụ thể khái niệm Độ phức tạp tính toán Việc sử dụng lý thuyết xác suất ngẫu nhiên làm sở để nghiên cứu mật mã giúp C.Shannon đưa khái niệm bí mật hoàn toàn hệ mật mã từ năm 1948, khởi đầu cho lý thuyết xác xuất mật mã Trong thực tiễn làm mật mã, dãy bit ngẫu nhiên dùng để trộn với rõ (dưới dạng dãy bit xác định) thành mã Lý thuyết độ phức tạp tính toán đời từ năm 1960 cho ta cách thích hợp để quy yêu cầu bí mật ngẫu nhiên yêu cầu định nghĩa yêu cầu độ phức tạp tính toán Bây ta nói : giải pháp mật mã bảo đảm bí mật, thuật toán thám mã, có, phải thực với độ phức tạp tính toán cực lớn Tức vượt giới hạn khả tính toán (bao gồm máy tính) mà người thám mã có Về lý thuyết, xem độ phức tạp tính toán với tốc độ tăng vượt hàm mũ, thuộc loại NP-khó Tuy nhiên, lý thuyết độ phức tạp tính toán không cống hiến cho ta khái niệm để giúp xác hóa tiêu chuẩn bí mật giải pháp mật mã, mà mở giai đoạn nghành mật mã, biến nghành mật mã thành khoa học có nội dung lý luận phong phú có ứng dụng thực tiễn quan trọng nhiều lĩnh vực đời sống đại Bước ngoặt có tính cách mạng lịch sử khoa học mật mã đại xẩy vào năm 1976 hai tác giả Diffie Hellman đưa khái niệm mật mã khóa công khai phương pháp trao đổi công khai để tạo khóa bí mật chung mà tính an toàn bảo đảm độ khó toán toán học cụ thể (bài toán tính “Logarit rời rạc”) Hai năm sau, năm 1978, Rivest, Shamir Adleman tìm hệ mật mã khóa công khai sơ đồ chữ ký điện tử hoàn toàn ứng dụng thực tiễn, tính bảo mật an toàn chúng bảo đảm độ phức tạp toán số học tiếng toán phân tích số nguyên thành số nguyên tố Sau phát minh hệ mật mã (mà thường gọi RSA), việc nghiên cứu để phát minh hệ mật mã khóa công khai vào toán khác an toàn thông tin tiến hành rộng rãi, lý thuyết mật mã an toàn thông tin trở thành lĩnh vực khoa học phát triển nhanh vài ba thập niên cuối kỷ 20, lôi theo phát triển số môn toán học tin học 1.3 Phân loại hệ mật mã Có nhiều cách phân loại hệ mật mã Dựa vào cách truyền khóa phân hệ mật mã thành hai loại: - Hệ mật đối xứng (hay gọi mật mã khóa bí mật): Là hệ mật dùng chung khóa trình mã hóa liệu giải mã liệu Do khóa phải giữ bí mật tuyệt đối Trong trình tiến hành trao đổi thông tin bên gửi bên nhận thông qua việc sử dụng phương pháp mã hóa đối sứng, thành phần quan trọng cần phải giữ bí mật khóa Việc trao đổi, thỏa thuận thuật toán sử dụng việc mã hóa tiến hành cách công khai, bước thỏa thuận khóa việc mã hóa giải mã phải tiến hành bí mật thấy thuật toán mã hóa đối xứng có lợi áp dụng quan hay tổ chức đơn lẻ cần phải trao đổi thông tin với bên thứ việc đảm bảo tính bí mật khóa đặt lên hàng đầu Mã hóa đối xứng phân thành hai loại: loại thứ tác động rõ theo nhóm bits Từng nhóm bits gọi khối (Block) thuật toán gọi mã hóa khối (Block Cipher) Theo đó, khối liệu văn ban đầu thay khối liệu khác có độ dài Đối với thuật toán ngày kích thước chung Block 64 bits Loại thứ hai tác động lên rõ theo bit thuật toán áp dụng gọi Stream Cipher Theo đó, liệu văn mã hóa bit thuật toán mã hóa dòng có tốc độ nhanh thuật toán mã hóa khối thường áp dụng lượng liệu mã hóa chưa biết trước Một số thuật toán tiếng mã hóa đối sứng : DES, Triple DES (3DES), RC4, AES… - Hệ mật mã bất đối xứng (hay gọi mật mã khóa công khai) : Các hệ mật dùng khóa để mã sau dùng khóa khác để giải mã, nghĩa khóa để mã hóa giải mã khác Các khóa tạo nên cặp chuyển đổi ngược khóa suy từ khóa Khóa dùng để mã hóa công khai khóa dùng để giải mã phải giữ bí mật thuật toán có loại khóa : khóa để mã hóa gọi khóa công khai (public key), khóa để giải mã gọi khóa bí mật (private key) Mã hóa khóa công khai đời để giải vấn đề quản lý phân phối khóa phương pháp mã hóa đối xứng trình truyền sử dụng mã hóa khóa công khai thực sau: Bên gửi yêu cầu cung cấp tự tìm khóa công khai bên nhận server chịu trách nhiệm quản lý khóa Sau hai bên thống thuật toán dùng để mã hóa liệu, bên gửi sử dụng khóa công khai bên nhận với thuật toán thống để mã hóa thông tin gửi Khi nhận thông tin mã hóa, bên nhận sử dụng khóa bí mật để giải mã lấy thông tin ban đầu với đời mã hóa công khai khóa quản lý cách linh hoạt hiệu Người sử dụng cần bảo vệ private key Tuy nhiên nhược điểm mã hóa khóa công khai nằm tốc độ thực hiện, chậm nhiều so với mã hóa đối xứng Do người ta thường kết hợp hai hệ thống mã hóa khóa đối xứng công khai lại với gọi Hybrid Cryptosystems Một số thuật toán mã hóa công khai tiếng : Diffle-Hellman,RSA, 1.4 Tiêu chuẩn đánh giá hệ mật mã Để đánh giá hệ mật mã người ta thường đánh giá thông qua tính chất sau : 10 thống trao đổi file Hệ thống hoạt động sau : Tất liệu lưu trữ máy chủ mạnh để bảo đảm an toàn dễ quản lý Nhưng người làm IT người khoái chơi nên it họ gần server , họ bị hạn chế lại gần server có mức độ giới hạn truy cập Thế mà truy cập không máy server Giải pháp đưa ta nối máy chủ mạng (LAN , WAN hay internet ) người truy cập thông qua mạng Như ta hình dung mô hình truy cập sau : máy chủ có chương trình chạy tiếp nhận yêu cầu (server) Những người muốn lấy liệu (client) kết nối với máy chủ thông qua môi trường mạng để lấy liệu máy Đây mô hình client / server Giao tiếp socket giúp thực mô hình client / server dễ dàng Ví dụ: A muốn tới nhà B chơi trước hết A phải mở cửa để bước đường, Sau A đón taxi mà không cần quan tâm đến việc phải để đến nhà B , Khi tới nhà B A phải bấm chuông để B mở cửa Quá trình kết nối ứng dụng mạng giống , client mở socket vô danh ( khái niệm trừu tượng để mở "cái cửa" ) , sau nhờ lớp mạng tạo kết nối tới server (không cần quan tâm đến kết nối ) Song song server tạo socket khác có địa hẳn hoi ( cửa thứ hai , có chuông , số nhà ) Khi có kết nối tới server dựa vào thông tin socket server ( giống client tìm số nhà,bấm chuông ) server mở cổng client / server bắt đầu trình truyền liệu Bây gìơ ta nói đến địa IP port IP địa mạng thiết bị PC , router Port khái niệm ảo xây dựng lớp Application mô hình OSI để phân biệt gói tin nhận process VD gói tin A ( lên tới lớp application )là cho ứng dụng FTP hệ điều hành lại cho vào ứng dụng web Vì lớp Application cần có phân biệt gói tin ứng dụng Port thông tin để biết gói tin ứng dụng Khi ta nói Web server chạy port 80 tức gói tin nhận hệ điều hành lấy gói tin gửi tới port 80 truyền cho Web server 51 Với phát triển Web, socket tiếp tục đóng vai trò quan trọng việc trì luồng truyền thông Internet Các ứng dụng có liên quan đến Internet viết lớp bên socket, ví dụ socket tích hợp số phần địa Website, trình duyệt web công nghệ bảo mật Scure Socket Layer Tuy nhiên, lập trình viên Web gần luôn bị ngăn cản tạo socket riêng cách thủ công Các socket thực không cần thiết việc phát triển ứng dụng Web Dù bạn dùng Java, serlet, hay CGI, PHP,…, bạn không mở cổng cách tường minh Các socket tồn để kết nối người dùng với ứng dụng Web, chi tiết socket ẩn lớp sâu để người động chạm đến Các lập trình viên tránh khó khăn việc tạo socket nhờ thư viện lớp hệ mới, chẳng hạn Microsoft Foundation ClassCsocket CsocketFile Lập trình viên Uinix dùng Socket++ Lập trình viên Java có tập hợp công cụ riêng socket Java.net.Socket lớp dùng rộng rãi việc tạo socket phía yêu cầu dịch vụ độc lập hệ thống, java.net.ServerSocket xây dựng socket sẵn sàng cho việc nhận yêu cầu từ máy yêu cầu dịch vụ Với công cụ này, nhà phát triển nhanh chóng tạo socket mà không cần phải “sa lầy “ chi tiết lập trình 2.9.2 Các thuộc tính Socket Socket có thuộc tính sau : + Domain : Vùng giao tiếp socket Nếu socket hoạt động môi trường internet có giá trị AF_INET (tức hoạt động dựa theo chuẩn internet dùng IP để xác định địa vật lý ) Nếu socket hoạt động môi trường mạng cục ta dùng giao chuẩn : AF_UNIX (dùng đường dẫn hệ thống file để đặt tên xác định kết nối hai hay nhiều ứng dụng Trong môi trường Linux thiết bị coi hệ thống file đặc biệt socket coi ) 52 + Kiểu socket type : SOCK_STREAM : tạo kết nối bền vững (kết nối dạng TCP ) Nói nôm na kết nối đảm bảo gói tin đến đích an toàn không bị mát , có nhược điểm chậm tốn nhiều tài nguyên , SOCK_DGRAM : cách gửi nhận liệu chiều (kết nối UDP) , client gửi liệu mà không cần biết server có nhân đựơc liệu hay không Server nhận liệu không cần phải xác nhận với client nhận liệu Tuy không an toàn nhanh sử dụng nhiều môi trường multimeida (còn loại socket raw -socket dùng ) +Giao thức socket (protocol ): Giao thức cách quy ước gửi nhận liệu trình trao đổi thông tin (VD gửi trước , nhận , gửi nhận theo thứ tự ) Có nhiều giao thức loại socket , dùng nhiều TCP UDP 2.9.3 Các hàm thông dụng Socket Hàm tạo socket : SOCKET socket( int af, int type, int protocol); af : domain Có thể lấy giá trị sau : AF_INET , AF_UNIX , AF_IPX , AF_ISO , AF_NS type : SOCK_STREAM , SOCK_DGRAM protocol : lấy giá trị để sử protocol mặc định cho loại socket Giá trị trả sokcet discriptor , số dùng để mô tả socket vừa tạo Hàm đóng socket : closesocket(SOCKET sk ) ; Hàm bind int bind(SOCKET s, const struct sockaddr* name, int namelen); Trước gọi hàm bind bạn phải tạo socket trước hàm socket() Sau tạo socket tới lúc dùng hàm bind gán cho thông tin port địa 53 Thông tin đựơc lưu trữ struct sockaddr* name Hàm listen int listen( SOCKET s, int backlog); Hàm dùng để tạo hàng đợi kết nối backlog số kết nối tối đa hàng đợi Do server lúc có nhiều kết nối tới cần phải có hàng đợi để lưu trữ kết nối Socket s đóng vai trò lắng nghe kết nối đưa vào hàng đợi Hàm accept SOCKET accept( SOCKET s, struct sockaddr* addr, int* addrlen); Cách hoạt động hàm accept sau: Khi ta gọi hàm accept đưa thread mà hàm accept hoạt động vào trạng thái blocking Khi có kết nối hàng đợi hàm accept kết thúc thread thoát khỏi trạng thái blocking Khi hàm accept tạo socket ( thông tin socket biết ) đặt địa client vào struct sockaddr* addr Socket kết trả hàm accept Ta dùng socket để liên lạc với client không dùng socket cũ s Hàm select int select( int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, const struct timeval* timeout); Đây hàm quan trọng Hàm dùng để thay đổi trạng thái socket từ blocking sang non-blocking ngược lại Bình thường socket tạo từ hàm tạo socket dạng blocking , tức đưa thread vào trạng thái blocking chưa có liệu chưa có kết nối Ta dùng hàm select để thay đổi trạng thái Hàm select trả có socket danh sách socket readfds writefds phát sinh tín hiệu sẵn sàng hoạt động Nếu chưa có tín hiệu hàm listen đưa thread vào trạng thái ngủ Ta lợi dụng điều để viết chương trình mà không cần phải tạo nhiều thread để quản lý kết nối 54 Một chương trình Socket java: Chương trình mô tả sau: 1/ Server: - Lắng nghe chập nhận kết nối từ cổng 9999 - Cho phép nhiều client kết nối đến lúc - Khi client gửi đến chuỗi : + Nếu chuỗi "quit" ngắt kết nối với client + Tiến hành đảo chuỗi + Gửi chuỗi đảo cho client 2/ Client: - Kết nối tới Server qua cổng 9999 - Nhập chuỗi từ bàn phím - Gửi chuỗi tới server - Hiển thị chuỗi từ server gửi tới Bây bước lập trình: Các thư viện cần thiết: import java.io.*; import java.net.*; 1/ Lập trình phía máy chủ: server.java: Lập trình socket trước hết cần tạo đối tượng socket Vì phía server nên phải ServerSocket ServerSocket sk=new ServerSocket(9999); // lắng nghe cổng 9999 Để cho phép lúc có nhiều client kêt nối đến cần có tiến trình Mỗi có kết nối tương ứng tiến trình tạo boolean listening=true; while(listening){ new threadServer(sk.accept()).start(); } Tiến trình tạo có tên thread Server Lớp threadServer có phương thức khởi tạo có tham số đối tượng socket socket 55 socket server chấp nhận kết nối Dướ i mã nguồn lớp threadServer: import java.io.*; import java.net.*; import java.util.*; public class threadServer extends Thread { Socket socket=null; public threadServer(Socket socket){ this.socket=socket; } public void run(){ try{ PrintWriter out=new PrintWriter(socket.getOutputStream(),true); BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); String inLine; while(true){ inLine=in.readLine(); Calendar cal =new GregorianCalendar(); if(inLine.equalsIgnoreCase("quit"))break; else { out.println(daochuoi(inLine)); } } }catch(IOException e){ e.printStackTrace(); } } public String daochuoi(String st){ int j=0; Char[] c=st.toCharArray(); 56 for(int i=st.length();i>=0;i ){ c[j]=st.charAt(i); ++j; } String st2= String(c); return st2; } } Như xong phía máy chủ 2/ Lập trình phía máy khách: Class client.java: import java.io.*; import java.net.*; public class client { public static void main(String[] args)throws Exception{ Socket cSk=null; PrintWriter out=null; BufferedReader in=null; try{ cSk=new Socket("127.0.0.1",9999);// khởi tạo socket // out : đưa chuỗi lên server out=new PrintWriter(cSk.getOutputStream(),true); // in: nhận chuỗi gửi từ server in=new BufferedReader(new InputStreamReader(cSk.getInputStream())); }catch(IOException e){ e.printStackTrace(); } String inLine; // uIn: cho phép nhập chuỗi từ bàn phím BufferedReader uIn=new BufferedReader(new InputStreamReader(System.in)); while(true){ 57 inLine=uIn.readLine();// tiến hành đọc từ bàn phím gán chuỗi đọc cho inLine if(inLine.equalsIgnoreCase("quit")){ break; } out.println(inLine);// gửi chuỗi lên server out.flush(); System.out.println(in.readLine());// in hình chuỗi nhận từ server } } } Chạy chương trình: chạy file server.java trước sau client.java Bạn dùng telnet thay cho client Để dùng telnet: vào DOS đánh dòng lệnh telnet 127.0.0.1 9999 Bây nhập vào chuỗi nhận chuỗi đảo chuỗi vừa nhập vào 2.10 Môi trường phát triển tích hợp NetBeans The NetBean IDE môi trường phát triển, công cụ dành cho lập trình viên để viết, biên dịch, gỡ lỗi (debug) triển khai (deploy) chương trình Ngoài việc hỗ trợ Java phiên (Java SE, Java EE, Java ME), Netbean IDE công cụ lý tưởng cho việc phát triển phần mềm ngôn ngữ PHP, C/C++, Ajax JavaScrip Phiên 6.5 tăng cường hỗ trợ cho web framework, trình ứng dụng máy chủ GlassFish sở liệu Chuơng trình viết Java hỗ trợ ngôn ngữ lập trình Có số lượng lớn module cho phép mở rộng Netbeans IDE Netbeans IDE sản phẩm miễn phí giới hạn việc sử dụng Bên cạnh có NetBeans Platform, tập hợp module thành phần mở rộng sử dụng tảng chung cho việc tạo ứng dụng desktop lớn Các đối tác ISV (independent software vendor - Các nhà cung cấp 58 phần mềm độc lập) cung cấp plug-in để dể dàng tích hợp vào Platform sử dụng để phát triển công cụ giải pháp riêng họ Một số Module tích hợp netbean : 2.10.1 NetBeans Profiler Các Profiler Netbeans công cụ cho giám sát ứng dụng Java: Nó giúp bạn tìm chỗ rò rỉ nhớ tối ưu hóa tốc độ Formerly downloaded separately, it is integrated into the core IDE since version 6.0 Trước tải cách riêng biệt, tích hợp vào IDE lõi kể từ phiên 6.0 2.10.2 Giao diện thiết kế công cụ Công cụ cho phép nhà phát triển chế tạo thử nghiệm thiết kế Swing GUIs cách kéo định vị thành phần giao diện 2.10.3 NetBeans JavaScript Editor NetBeans JavaScript Editor cung cấp mở rộng hỗ trợ Javascript, Ajax CSS 2.10.4 Lý chọn Netbean Netbean IDE hỗ trợ nhiều hệ điều hành khác Windows, Mac, Linux, Solaris Netbean bao gồm IDE mã nguồn mở tảng ứng dụng cho phép nhà phát triển nhanh chóng tạo nên ứng dụng dành cho web, doanh nghiệp, destop thiết bị di động ngôn ngữ lập trình Java, C/C++, JavaScript, Ruby, Groovy, PHP Chất lượng plugin Netbean cao Netbean tảng thực thi cách quán có định hướng, vốn tạo để làm Java IDE Netbean có thiên hướng hội tụ tất lập trình viên java cần IDE Mọi thứ có sẵn mà cài Hơn Netbean hướng tới công nghệ giới java cách bản: Tomcat Glassfish tích hợp Profiler cho phép lập trình viên nhìn vào tận bên máy ảo, lập trình swing dựa layout hỗ trợ kéo thả giao diện 59 tương tự làm việc với JSF, tiện làm prototyping Việc run deploy ứng dụng dù commandline, swing hay web dễ dàng 2.10.5 Sử dụng Netbean Màn hình chương trình Để tạo project mới,trên task bạn chọn: File ->New Project nhấn tổ hợp phím Ctrl + Shift + N 60 Kế tiếp ta chọn mục Java,ở khung bên phải chọn mục JavaApplication nhấn Next Một hộp thoại hiển thị với mục : -Project Name : mặc định JavaApplication1 ta đổi tên Project 61 muốn -Project Location: nơi dẫn đến source lưu trữ Project Ta vào Browse để sữa lại đường dẫn -Use Dedicated Folder for Storing Libraries :được sử dụng ta muốn lưu trữ thư viện,cái không cần check check không sao -Create Main Class: khởi tạo hàm chính,mục măc định check nên gỡ bỏ để thuận tiện cho việc code -Set as Main Project:thiết lập Project thành Project Mục nên nguyên Hình phần chỉnh sữa xong Kết thúc click vào Finish Sau kết thúc cửa sổ Project xuất cho phép bạn thiết kế muốn 62 Phần Main.java nơi viết code cho chương trình Để thiết kế giao diện chọn tên Project click chuột phải chọn chọn New Jframe Frorm 63 Một cửa sổ yêu cầu bạn đặt tên cho Frame vừa tạo tên mặc định NewJFrame Kết thúc Finish 64 Với giao diện ta dễ dàng kéo thả thành phần giao diện Palette vào phần Design thay đổi thuộc tính mặc định chúng Properties viết code tương ứng cho phần Source Biên xoạn tệp nguồn Để biên soạn tệp nguồn bạn, chọn Build > Build Main Project từ trình đơn IDE Nếu liệu đầu việc xây dựng kết luận BUILDSUCCESSFUL, biên soạn thành công chương trình Nếu liệu đầu việc xây dựng kết luận BUILD FAILED, ta có lỗi cú pháp mã chương trình Các lỗi báo cáo cửa sổ Output dạng văn siêu liên kết Ta nhấp đúp vào siêu liên kết để điều hướng đến nguồn lỗi Sau sửa lỗi chọn Build > Build Main Project lẫn Chạy chương trình Sau sửa lỗi song tiến hành chạy chương trình cách Từ trình đơn IDE, chọn Run > Run Main Project Chương III XÂY DỰNG CHƯƠNG TRÌNH MÃ HÓA ỨNG DỤNG TRONG TRUYỀN FILE 65