Tài liệu Bài tập lập trình mạng
MꢀC LꢀC
MꢀC LꢀC...........................................................................................................................1
DANH MꢀC THUẬT NGỮ TIẾNG ANH ........................................................................3
DANH MꢀC CHỮ VIẾT TꢁT...........................................................................................5
MꢀC LꢀC HꢂNH................................................................................................................7
LꢃI NꢄI ĐꢅU.....................................................................................................................9
LAB 1. LẬP TRꢂNH CƠ BẢN[1,2].................................................................................11
LAB 2. LỚP - ĐỐI TƯỢNG - KẾ THỪA [1, 2, 7] .........................................................21
LAB 5. QUẢN Lꢆ THREAD [11,12] ..............................................................................87
TÀI LIỆU THAM KHẢO...............................................................................................253
1
DANH MꢀC THUẬT NGỮ TIẾNG ANH
Từ
Nghĩa của từ
abstract
break
catch
Trừu tượng
Dừng vòng lặp
Từ khóa đầu của một khối bắt ngoại lệ
Bỏ qua phần cuối vòng lặp, tiếp tục sang bước tiếp theo.
Giá trị mặc định của phương thức switch()
Kế thừa
continue
default
extends
final
Một hằng số, phương thức hay một lớp không được ghi đè
Một phần của khối xử lý ngoại lệ try luôn được thực hiện
finally
implements
import
Thực hiện giao diện
Khai báo một gói thư viện
Kiểm tra một đối tượng là một thể hiện của lớp
Giao diện
instanceof
interface
new
Tạo một đối tượng mới của lớp
Tham chiếu rỗng
null
package
private
Gói
Tiền tố chỉ được truy cập bởi phương thức của lớp
Tiền tố được truy cập bởi phương thức của lớp, lớp con của
và các lớp khác trong cùng một gói
protected
public
Tiền tố có thể được truy cập bởi phương thức của tất cả các lớp
Trả về của một phương thức
return
super
Gọi phương thức khởi tạo của lớp cha
đồng bộ
synchronized
this
Sử dụng như một tham chiếu đến đối tượng hiện tại
3
DANH MꢀC CHỮ VIẾT TꢁT
Chꢂ viꢃt tꢄt
UDP
ꢅ nghĩa
User Datagram Protocol
Transmission Control Protocol
Internet Protocol
TCP
IP
URL
Uniform Resource Locator
Cơ Sở Dꢈ Liệu
CSDL
JDBC
CNTT
HĐH
MVC
DNS
Java Database Connectivity
Công Nghệ Thông Tin
Hệ Điều Hành
Model-View-Control
Domain Name System
Application Programming Interface
File Transfer Protocol
Java Development Kit
GigaByte
API
FTP
JDK
GB
UCLN
BCNN
RAM
RMI
Ước Chung Lớn Nhất
Bội Chung Nhỏ Nhất
Random Access Memory
Remote Method Invocation
Java Virtual Machine
Network Interface Card
Đại học Kinh tế Kꢉ thuật Công nghiệp
JVM
NIC
ĐH KTKT CN
5
MꢀC LꢀC HꢆNH
Hình 1. Chèn code tự động..........................................................................................................................22
Hình 2. Tạo interface...................................................................................................................................40
Hꢊnh 3. Màn hꢊnh giao dịch ngân hàng ....................................................................................................103
Hꢊnh 4. Thêm thư viện MYSQL JDBC Driver .........................................................................................112
Hꢊnh 5. Download JDBC Driver cho SQL................................................................................................113
Hꢊnh 6. Một số màn hꢊnh quản lý thông tin Sinh viên ..............................................................................116
Hꢊnh 7. Một số màn hꢊnh quản lý Thư viện .............................................................................................149
Hꢊnh 8. Địa chỉ socket..............................................................................................................................162
Hꢊnh 9. Mô hꢊnh Client-Server chế độ hướng kết nối..............................................................................169
Hꢊnh 10. Mô hꢊnh Cient Server ở chế độ không kết nối...........................................................................192
Hình 11. Tuần tự các bước thực hiện theo giao thức UDP .......................................................................205
Hình 12. Sơ đồ lớp phꢋa Client..................................................................................................................205
Hình 13. Sơ đồ lớp phía Server................................................................................................................206
Hꢊnh 14. Các thành phần của URL ...........................................................................................................221
Hình 15. Kiến trꢌc RMI ............................................................................................................................228
7
LꢇI NꢈI ĐꢉU
Ngày nay do nhu cầu thực tế và do sự phát triển mạnh mẽ của nhiều công nghệ tꢋch hợp,
dẫn đến các chương trꢊnh ứng dụng hiện này hầu hết đều có khả năng thực hiện trên môi
trường mạng. Ngôn ngꢈ JAVA là ngôn ngꢈ phù hợp để viết các ứng dụng mạng. So với
lập trꢊnh thông thường, lập trình mạng đòi hỏi người lập trình hiểu biết và có kꢉ năng tốt
để tạo giao tiếp và trao đổi dꢈ liệu giꢈa các máy tính với nhau.
Để hỗ trợ sinh viên chuyên ngành CNTT trong nhà trường tiếp cận với kꢉ thuật lập trꢊnh
mới này, tiếp theo cuốn tài liệu học tập lý thuyết “Công nghꢊ JAVA”, chꢌng tôi xây dựng
cuốn “Bꢋi tꢌp lꢌp trꢍnh mꢎng”, nhằm cung cấp cho sinh viên nhꢈng kiến thức và kꢉ thuật
cơ bản nhất để phát triển các chương trꢊnh ứng dụng mạng, thông qua các dạng bài tập từ
cơ bản đến nâng cao qua các chủ đề: lập trꢊnh cơ bản, lập trꢊnh hướng đối tượng, lập trꢊnh
CSDL JDBC, lập trꢊnh mạng dùng socket, lập trꢊnh phân tán với RMI. Sinh viên sẽ thực
hiện các bài thực hành này trên phòng máy nhà trường.
Nội dung cuốn tài liệu bao gồm 12 bài lab chia thành các chủ đề khác nhau. Trong mỗi chủ
đề chꢌng tôi đưa ra tóm tắt lý thuyết, bài tập mẫu, sau đó là bài tập tương tự, và bài tập áp
dụng. Kết quả qua nhꢈng bài lab, sinh viên được rèn và thành thạo các kꢉ năng lập trꢊnh
hướng đối tượng, lập trꢊnh CSDL, lập trình với giao thức truyền thông có sẵn và khả năng
tích hợp trong các ứng dụng khác nhau, nhất là các giao thức truyền thông thời gian thực,
từ đó sinh viên có thể viết được các phần mềm quản lý theo mô hꢊnh MVC, xây dựng được
các ứng dụng mạng, các ứng dụng tích hợp và triệu gọi lẫn nhau trên mạng Intranet (mạng
cục bộ), mạng Internet (mạng toàn cầu), các hệ thống xử lý truy xuất dꢈ liệu phân tán hoàn
chỉnh.
Chúng tôi xin chân thành cảm ơn Thầy Nguyễn Hoàng Chiến, phó chủ nhiệm, phụ
trách khoa CNTT trường ĐH KTKT CN cùng với các đồng nghiệp đã đóng góp ý kiến cho
cuốn tài liệu này. Vꢊ tài liệu được biên soạn lần đầu, chꢌng tôi đã cố gắng hoàn chỉnh, song
không tránh khỏi thiếu sót. Rất mong nhận được sự góp ý của bạn đọc để tài liệu học tập
được hoàn thiện hơn.
Xin trân trọng cảm ơn!
Nhóm tác giả
9
LAB 1. LẬP TRꢆNH CƠ BẢN[1,2]
A. MꢀC TIÊU
Trang bị cho sinh viên kꢉ năng lập trꢊnh cơ bản trong java: cấu trꢌc if, vòng lặp while…do,
for.., khai báo mảng, xử lý trên mảng.
B. NỘI DUNG
- Lệnh rẽ nhánh (if), lệnh lựa chọn (switch).
- Lệnh lặp, sử dụng mảng để thao tác trên các phần tử cùng kiểu.
C. YÊU CꢉU PHꢉN CỨNG, PHꢉN MỀM
- Máy tꢋnh cài HĐH windows, RAM tối thiểu 256MB.
- Phần mềm NETBEAN IDE 8.0, JDK 1.8.
D. KẾT QUẢ SAU KHI HOÀN THÀNH
Sinh viên thành thạo các câu lệnh : rẽ nhánh, lựa chọn, lệnh lặp, thao tác trên mảng, áp
dụng giải các bài tập từ đơn giản đến phức tạp.
E. HƯỚNG DẪN CHI TIẾT
1. Cấu trúc rẽ nhánh if…else
if (boolean_expr){ //Nếu boolean_expression là true
//do task1
}
else { //Nếu boolean_expression là false
//do task2
}
Bài 1. Tꢊm max, min của 2 số nguyên nhập vào từ bàn phꢋm
Hướng dẫn:
public class Bai1 {
public static void main(String[] args) {
int a,b,max,min;
Scanner sc = new Scanner(System.in); //Phím tắt CTRL + Space
System.out.println("Nhap so nguyen a:");
a = sc.nextInt();
System.out.println("Nhap so nguyen b:");
b = sc.nextInt();
max = (a>b)?a:b;
min = (a>b)?b:a;
11
System.out.println("Max la:"+max);
System.out.println("Min la:"+min);
}
}
Bài 2. Giải phương trꢊnh bậc 2 ax2 + bx + c = 0
Hướng dẫn:
Sử dụng Scanner nhập 3 số nguyên.a, b, c. Tꢋnh delta=b*b-4*a*c.
Sử dụng if kiểm tra từng trường hợp của delta.
if(delta<0)
System.out.println("PT vo nghiem");
else if(delta==0){
float x = (float)-b/(2*a);
System.out.printf("PT co nghiem kep x1=x2=%.2f",x);
}else{
float x1 = (float) (-b-Math.sqrt(delta))/(2*a);
float x2 = (float) (-b+Math.sqrt(delta))/(2*a);
}
2. Cấu trúc switch
switch (controlling_expr){
case value1: //do task1
break;
case value2: //do task2
break;
...
case valueN: //do taskN
break;
default:
Bài 3. Viết chương trꢊnh java cho phép tạo và thực hiện theo menu sau:
1. Nhập vào một số nguyên dương n.
2. Tꢋnh tổng các số từ 1 đến n
3. Kiểm tra n có là số nguyên tố
4. Kiểm tra n có là số hoàn hảo.
5. Hiển thị số n thành tꢋch các thừa số nguyên tố.
6. Thoát
12
(Hiển thị 1 số nguyên dương thành tꢋch các thừa số nguyên tố: n = 24 in ra: n = 23 x3
Hướng dẫn:
)
Phương thức nhꢌp: Dùng Scanner
Phương thức kiꢏm tra hoꢋn hảo
boolean sohh(int a){
int tong=0;
for (int i = 1; i < a; i++) {
if(a%i==0)
tong+=i;
}
if(tong==a)
return true;
else
return false;
}
Phương thức hiꢏn thꢐ sꢑ hoꢋn hảo
public void hienThisHH(int a){
for (int i = 0; i < a; i++) {
if(sohh(i)==true)
System.out.print(i+" ");
}
}
Phương thức kiꢏm tra nguyên tꢑ
boolean songt(int a){
if (a < 2)
return false;
for (int i = 2; i <= Math.sqrt(a); i ++)
{
if (a%i==0)
{
return false;
}
}
13
return true;
}
Phương thức hiꢏn thꢐ sꢑ nguyên tꢑ
public void hienThisNT(int a){
for (int i = 1; i < a; i++) {
if(songt(i)==true){
System.out.print(i +" ");
}
}
}
Phương thức phân tꢒch thꢋnh thừa sꢑ
void tichthuaso(int a){
int i=2;
int dem=0;
System.out.println("Tich thua so");
while(a!=1){
if(a%i==0){
a/=i;
dem++;
}
else {
if(dem==0||dem==1)
System.out.print(i+"*");
else
System.out.print(i+"*"+dem+"*");
i++;
dem=0;
}
}
}
Viết phương thức main dùng switch case để tạo menu. Tổ chức chương trꢊnh theo sơ đồ
sau:
14
main()
nhap()
hienthisohh()
tichts()
hienthisont()
3. Vꢓng lꢔp while, do…while, for
Dạng 1
while(boolean_expr){
//do something
}
Dạng 2
do {
//do something
} while(boolean_expr);
Bài 4. Tìm UCLN, BCNN của 2 số được nhập vào từ bàn phꢋm.
Hướng dẫn:
public class Bai4{
int a;
int b;
public int getA() {
return a;
}
public int getB() {
return b;
}
void nhap() {
Nội dung phương thức nhập.
}
int USCLN(int a, int b) {
while (a != b) {
if (a > b) {
a = a - b;
15
} else {
b = b - a;
}
}
return a;
}
int BSCNN(int a,int b){
return a*b/USCLN(a, b);
}
public static void main(String[] args) {
Bai4 bai=new Bai4();
bai.nhap();
System.out.println("UCLN:" + bai.USCLN(bai.getA(), bai.getB()));
System.out.println("BCNN :" + bai.BSCNN(bai.getA(), bai.getB()));
}
}
4. Mảng
Khai báo: DataType[ ] array = new DataType[size];
DataType[ ] array = {value1, value2,..., valueN};
Bài 5. Nhập dãy n phần tử. Xóa các phần tử có giá trị bằng x nhập từ bàn phím.
Hướng dẫn:
import java.util.Scanner;
public class Delete{
public static void main(String[] args){
int n, x, flag = 1, loc = 0;
Scanner s = new Scanner(System.in);
System.out.print("Enter no. of elements you want in array:");
n = s.nextInt();
int a[] = new int[n];
System.out.println("Enter all the elements:");
for (int i = 0; i < n; i++){
a[i] = s.nextInt();
}
System.out.print("Enter the element you want to delete:");
16
x = s.nextInt();
for (int i = 0; i < n; i++){
if(a[i] == x){
flag =1;
loc = i;
break;
}
else{
flag = 0;
}
}
if(flag == 1){
for(int i = loc+1; i < n; i++) {
a[i-1] = a[i];
}
System.out.print("After Deleting:");
for (int i = 0; i < n-2; i++){
System.out.print(a[i]+",");
}
System.out.print(a[n-2]);
}
else{
System.out.println("Element not found");
}
}
}
Bꢋi 6. Nhập một mảng nguyên từ bàn phꢋm
a) Sắp xếp và in lại dãy đã sắp ra màn hꢊnh.
b) In ra màn hꢊnh phần tử có giá trị nhỏ nhất
c) Tꢋnh trung bꢊnh cộng các phần tử chia hết cho 3.
Hướng dẫn:
▪ Sử dụng Array.sort (mang) để sắp xếp, sau đó dùng vòng lặp for duyệt từng phần
tử in ra màn hꢊnh.
▪ Cho số nhỏ nhất là số đầu tiên, sau đó so sánh số nhỏ nhất đó với các số còn lại nếu
số đó được so sánh nhỏ hơn thꢊ lấy số đó làm số nhỏ nhất.
17
Min=Math.min(Min,a[i])
▪ Duyệt mảng kiểm tra từng phần tử, nếu phần tử thứ i chia hết cho 3:
if(A[i] %3==0) thꢊ thực hiện cộng vào tổng, tăng số đếm các số chia hết cho 3.
▪ Lấy tổng chia cho số đếm được kết quả
Bài 7. Nhập mảng có n phần tử các số nguyên.
a. In ra các phần tử là số nguyên tố của mảng.
b. In ra các phần tử là số hoản hảo của mảng.
c. In ra các phần tử là số chẵn.
Hướng dẫn:
Khai báo mảng n phần tử nguyên. Sau đó sử dụng các phương thức sau:
Phương thức kiꢏm tra hoꢋn hảo: tương tự các bài trước.
Phương thức kiꢏm tra chẵn/lẻ
public static boolean kiemTraChan(int n){
if(n % 2 == 0){
return true;
}
else{
return false;
}
}
Bài 8. Nhập mảng có n phần tử các số nguyên, sắp xếp mảng tăng dần bằng thuật toán
chèn và hiển thị mảng đã sắp xếp ra màn hꢊnh.
Hướng dẫn:
import java.util.Arrays;
public class InsertionSort {
void InsertionSort(int[] nums){
for(int i = 1; i < nums.length; i++){
int value = nums[i];
int j = i - 1;
while(j >= 0 && nums[j] > value){
nums[j + 1] = nums[j];
j = j - 1;
}
nums[j + 1] = value;
}
18
}
public static void main(String args[]){
InsertionSort ob = new InsertionSort();
int nums[] = {7, -5, 3, 2, 1, 0, 45};
System.out.println("Original Array:");
System.out.println(Arrays.toString(nums));
ob.InsertionSort(nums);
System.out.println("Sorted Array");
System.out.println(Arrays.toString(nums));
}
}
Bài 9.
Dãy số Fibonacci được định nghĩa như sau: F0 =1, F1 = 1; Fn = Fn-1 + Fn-2 với n>=2. Nhập
một số tự nhiên n.
a) Hãy viết chương trꢊnh tꢊm số Fibonacci thứ n.
b) Hãy liệt kê các số Fibonaci nhỏ hơn n là số nguyên tố.
Hướng dẫn:
Viết phương thức ktnt (int n): tương tự các bài trên
Viết phương thức trả về số fibonacci thứ n
int fibonacci(int n) {
if (n < 2) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
Trong phương thức main(), nhập số nguyên n, gọi phương thức fibonacci(int n) để tꢊm số
Fibonacci thứ n.
Sử dụng vòng lặp để in ra các số Fibonacci nhỏ hơn n và là số nguyên tố
for (int i = 0; i < n; i++){
if (ktnt(i) == true) {
for (int j = 0; j < n; j++) {
if (i == fibonacci(j)) {
System.out.print(i + " ");
}
19
}
}
}
Bꢋi 10. Viết chương trꢊnh tꢊm điểm trung bꢊnh của hai học sinh trong ba môn học.
Cho điểm của học sinh thứ nhất là 60, 55 và 70, điểm của học sinh thứ hai là 80, 60 và 41
Hướng dẫn: Lưu trꢈ điểm của hai học sinh trong một mảng 2 chiều có 2 hàng và 3 cột.
Các hàng sẽ đại diện cho học sinh và các cột sẽ giꢈ điểm của học sinh.
class Array2DExample {
public static void main(String args[]) {
int[][] score = {
{60, 55, 70},
{80, 60, 41}
};
int[] sum = new int[2];
// tꢀng mꢁng
sum[0] = 0; // tꢀng cꢂa sinh viên 1
sum[1] = 0; // tꢀng cꢂa sinh viên 2
float[] avg = new float[2]; // trung bꢃnh mꢁng
for (int r = 0; r < 2; r++) {
for (int c = 0; c < 3; c++) {
sum[r] += score[r][c];
}
}
avg[0] = (float)sum[0] / 3; // trung bꢃnh cꢂa sinh viên 1
avg[1] = (float)sum[1] / 3; // trung bꢃnh cꢂa sinh viên 2
System.out.println("Average score of 1st student = " + avg[0]);
System.out.println("Average score of 2nd student = " + avg[1]);
}
}
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Bài tập lập trình mạng", để 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:
tai_lieu_bai_tap_lap_trinh_mang.pdf

