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

BÁO CÁO THỰC HÀNH Môn học: LẬP TRÌNH MẠNG

62 186 2

Đ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 62
Dung lượng 1,53 MB

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

Nội dung

Chường trình client kết nối đến socket của server vừa mở, tạo luồng Output để gửi dữ liệu và Input để nhận kết quả trả về: - Nhập chuỗi từ bàn phím - Gửi chuỗi đến server - Nhận về 2 chu

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 1

LỜI NÓI ĐẦU Lập trình mạng là một trong những nhiệm vụ quan trong trong việc phát triển các ứng dụng doanh nghiệp Một chương trình mạng được viết ra để các chương trình trên các máy tính khác nhau có thể truyền tin với nhau một cách hiệu quả và an toàn cho dù chúng được cài đặt trên mạng LAN, WAN hay mạng toàn cầu Internet, đây là điều căn bản đối với sự thành công của nhiều hệ thông Java là ngôn ngữ lập trình hướng đối tượng thuần thúy với nhiều đặc trưng ưu việt so với các ngôn ngữ lập trình hướng đối tượng khác như tính độc lập với nền, tính bảo mật,… Java là ngôn ngữ ngay

từ khi ra đời đã hướng đến lập trình mạng nên việc viết một chương trình lập trình mạng bằng Java dễ dàng hơn nhiều so với các ngôn ngữ khác

Bên cạnh phần lý thuyết của Lập trình mạng, học phần Thực hành Lập trình mạng giúp sinh viên được tiếp cận với cách lập trình trên môi trường mạng sử dụng ngôn ngữ JAVA Với sự hướng dẫn của thầy Nguyễn Văn Nguyên, em đã biết cách viết một chương trình mạng cơ bản, em xin chân thành cảm ơn thầy đã hướng dẫn em trong suốt quá trình học

Sinh viên thực hiện

Nguyễn Đức Vũ

Trang 3

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 2

Trang 4

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 3

MỤC LỤC

Nhóm : 15.11A LỜI NÓI ĐẦU 0

BÀI THỰC HÀNH SỐ 1 5

1 Bài 1 5

1.1 Đề bài 5

1.2 Thuật toán 5

1.3 Mã nguồn chương trình 6

1.4 Kết quả demo 8

2 Câu 2 8

2.1 Đề bài 8

2.2 Thuật toán 8

2.3 Mã nguồn chương trình 9

2.4 Kết quả demo 12

3 Câu 3 12

3.1 Đề bài 12

3.2 Thuật toán 12

3.3 Mã nguồn chương trình 13

3.4 Kết quả demo 18

BÀI THỰC HÀNH SỐ 2 20

1 Câu 1 20

1.1 Đề bài 20

1.2 Thuật toán 20

1.3 Mã nguồn chương trình 21

1.4 Kết quả demo 23

2 Câu 2 23

2.1 Đề bài 23

2.2 Thuật toán 23

2.3 Mã nguồn chương trình 24

2.1 Kết quả demo 27

3 Câu 3 28

3.1 Đề bài 28

Trang 5

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 4

3.2 Thuật toán 28

3.3 Mã nguồn chương trình 28

3.4 Kết quả demo 34

BÀI THỰC HÀNH SỐ 3 35

Đề bài 35

1 Mã nguồn chương trình 35

- style.css 35

- header.jsp 39

- bodyleft.jsp 42

- login.jsp 46

- checklogin.jsp 48

- index.jsp 48

- xemnhanvien.jsp 49

- xemphongban.jsp 50

- suathongtinphongban.jsp 51

- suachitiet.jsp 53

- timkiem.jsp 55

- xemchitiet.jsp 56

2 Kết quả demo 58

Trang 6

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 5

BÀI THỰC HÀNH SỐ 1

1 Bài 1

1.1 Đề bài

Xây dựng chương trình hội thoại Client/Server hoạt động theo giao thức TCP/IP

- Chương trình Server mở cổng và chờ nhận kết nối từ Client

- Client gửi một chuỗi ký tự đến Server Server nhận và xử lý gửi trả về cho client các công việc:

+ Đổi chuỗi đã gửi thành chuỗi in hoa + Đổi chuỗi đã gửi thành chuỗi thường + Đếm số từ của chuỗi đã gửi

Sử dụng hàm Trim() để xóa các khoảng trắng ở trước và sau từ, sau đó nêu

có các khoảng trắng liên tiếp nhau thì xóa đi, ta thu được chuổi str

Khai báo 1 biến đếm d khởi tạo bằng 0;

Sử dụng split(" ") ta thu được mảng b[] có số phần tử chính là số từ của chuỗi cho vòng for chạy từ 0 tới b.lengh rồi cho d++;

d chính là số từ của chuỗi

Chường trình client kết nối đến socket của server vừa mở, tạo luồng Output để gửi

dữ liệu và Input để nhận kết quả trả về:

- Nhập chuỗi từ bàn phím

- Gửi chuỗi đến server

- Nhận về 2 chuỗi: HOA, thường và số từ của chuỗi

- In ra màn hình

Trang 7

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 6

System.out.print("Xuat hien ket noi !");

DataInputStream dis= new DataInputStream(s.getInputStream()); DataOutputStream dos= new

Trang 8

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 7

Scanner sc= new Scanner(System.in);

Socket s= new Socket("localhost", 9876);

DataOutputStream dos= new DataOutputStream(s.getOutputStream());

DataInputStream dis= new DataInputStream(s.getInputStream());

System.out.println("Chuoi hoa: "+dis.readUTF());

System.out.println("Chuoi thuong: "+dis.readUTF()); System.out.println("So tu: "+dis.readInt());

} s.close();

}catch(Exception ex){

} }

public static void main(String []args){

new Client();

}

}

Trang 9

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 8

1.4 Kết quả demo

2 Câu 2

2.1 Đề bài

Xây dựng chương trình hội thoại Client/Server hoạt động theo giao thức TCP/IP

- Chương trình Client cho phép nhập vào từ bàn phím một chuỗi biễu diễn một phép tính gồm các toán tử +, -, (, )

- Xử lý chuỗi biểu thức theo thuật toán Balan để lấy kết quả

+ Duyệt từng ký tự của chuỗi

+ Nếu là số thì cộng dồn rồi đẩy vào numStack (number stack), nếu là kí tự (+ - * / ( )) thì đẩy vào opeStack (operator stack)

+ Nếu phép toán đang duyệt có mức ưu tiên thấp hơn phép toán ở đỉnh opeStack thì lấy phép toán trong stack ra cùng với 2 giá trị đầu trong

Trang 10

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 9

numStack tính toán và đưa giá trị tính được vào lại numStack, sau đó đưa phép toán đang duyệt vào opeStack

+ Nếu gặp ‘)’ thì lấy lần lượt giá trị cùng phép toán trong numStack, opeStack tính toán cho đến khi lấy ra được ( thì đưa giá trị tính được vào lại numStack và xóa ‘(‘ trong opeStack đi

+ Tiếp tục như vậy thì cuối cùng giá trị còn lại trong numStack là giá trị của biểu thức

+ Trả kết quả tính được về cho client

Chường trình client kết nối đến socket của server vừa mở, tạo luồng Output để gửi

dữ liệu và Input để nhận kết quả trả về:

- Nhập chuỗi biểu thức từ bàn phím

- Kiểm tra nếu chuỗi chứa các ký tự khác (1,2,….,9 , (,),+,-,*,/ ) thì cho người dùng nhập lại

- Gửi biểu thức đến server

- Nhận về kết quả của biểu thức

System.out.println("Xuat hien ket noi !");

DataInputStream dis= new DataInputStream(s.getInputStream()); DataOutputStream dos= new

ss.close();

}catch(Exception ex){

ex.printStackTrace();

}

Trang 11

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 10

}

private String getValue(String a, char o, String b){ //Giá trị của một phép toán

float af= Float.valueOf(a), bf= Float.valueOf(b);

switch(o){

case '+': return String.valueOf(af+bf);

case '-': return String.valueOf(af-bf);

case '*': return String.valueOf(af*bf);

private int prio(char c){ //Tính độ ưu tiên của phép toán

Stack<String> numst= new Stack<String>();

Stack<Character> opest= new Stack<Character>();

while(!opest.isEmpty()){

String n2= numst.pop(), n1=

numst.pop();

numst.push(getValue(n1, opest.pop(), n2));

} }else return num;

} break;

Trang 12

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 11

String n2= numst.pop(), n1= numst.pop();

numst.push(getValue(n1, opest.pop(), n2)); }

opest.push(c);

} break;

} }

while(!opest.isEmpty()){

String n2= numst.pop(), n1= numst.pop();

numst.push(getValue(n1, opest.pop(), n2));

} v= numst.pop();

Trang 13

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 12

Socket s= new Socket("localhost", 9999);

DataOutputStream dos= new DataOutputStream(s.getOutputStream());

DataInputStream dis= new DataInputStream(s.getInputStream());

}catch(Exception ex){

} }

public static void main(String []args){

- Chương trình Server mở cổng chờ nhận kết nối từ Client

- Chương trình Client kết nối và thực hiện trao đổi với chương trình Server

3.2 Thuật toán

Chương trình server mở kết nối ở 1 cổng socket và sẵn sàng nhận kết nối từ bất kì client nào, nếu có kết nối đến thì sẽ xuất hiện thông báo username đã vào chat room ở màn hình

Trang 14

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 13

- Server sẽ chấp nhận kết nối của client

- Tạo 1 tiến trình nhận sms của 1 client gửi về (class User), đẩy tiến trình vào danh sách kết nối

- Tiến trình vừa tạo sẽ nhận sms và đưa sms vào 1 hàng đợi (Queue)

- Mặt khác, server có 1 tiến trình lấy tất cả sms trong hàng đợi gửi về cho tất

cả các client trong danh sách

- Sms gồm có tên user của client và nội dung được gửi

Chương trình Client nhập vào username từ giao diện Login để kết nối đến Server, nếu kết nối thành công thì giao diện Login biến mất và hiện lên chat room, chat room hiển thị tất cả những sms của các client gửi đến server Từ giao diện chat room có thể gửi sms đến các client khác

3.3 Mã nguồn chương trình

- Server.Main:

public class Main extends Thread{

public static Vector<User> users= new Vector<User>();

public static Queue<String> sms= new LinkedList<String>();

//Tiến trình lấy sms trong Queue gửi đến các client

Thread thr= new Thread(){

public void run(){

} } catch (Exception ex) {

ex.printStackTrace();

}

Trang 15

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 14

} }.start();

ex.printStackTrace();

} }

public static void main(String []args){

new Main();

}

}

- Server.User //Tiến trình nhận sms và gửi sms với 1 client

public class User extends Thread{

Socket s;

DataOutputStream dos= null;

DataInputStream dis= null;

String name= null;

public User(Socket s){

this.s= s;

try{

dos= new DataOutputStream(s.getOutputStream());

dis= new DataInputStream(s.getInputStream());

name= dis.readUTF();

}catch(Exception ex){

ex.printStackTrace();

} }

public void run(){

Trang 16

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 15

}catch(Exception ex){

ex.printStackTrace();

} }

public String getUsername(){

DataOutputStream dos= null;

DataInputStream dis= null;

Trang 17

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 16

bottom.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 5));

bottom.add(new JLabel("Send SMS to all users: "));

chat= new JTextField(28);

public void actionPerformed(ActionEvent e) {

Object click= e.getSource();

if(click==login.login){

name= login.getUserName();

try{

s= new Socket("localhost", 999);

dos= new DataOutputStream(s.getOutputStream());

dis= new DataInputStream(s.getInputStream());

Trang 18

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 17

} catch (IOException e) {

e.printStackTrace();

} chat.setText("");

}

}

}

@Override

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

e.printStackTrace();

} }

}

- Client.Login:

public class Login extends JFrame{

private ChatRoom cr;

private JTextField name;

public JButton login;

private JLabel report= new JLabel("");

JPanel top = new JPanel();

top.add(new JLabel("Enter your nickname to connect!"));

Trang 19

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 18

add(top);

JPanel middle1= new JPanel();

name= new JTextField(15);

JPanel bottom= new JPanel();

login= new JButton("Login");

public String getUserName(){

return (name.getText().equals(""))?"Unknow name":name.getText();

}

}

3.4 Kết quả demo

Trang 20

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 19

Trang 21

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 20

BÀI THỰC HÀNH SỐ 2

1 Câu 1

1.1 Đề bài

Xây dựng chương trình hội thoại Client/Server hoạt động theo giao thức UDP

- Chương trình Server mở cổng và chờ nhận kết nối từ Client

- Client gửi một chuỗi ký tự đến Server Server nhận và xử lý gửi trả về cho client các công việc:

+ Đổi chuỗi đã gửi thành chuỗi in hoa + Đổi chuỗi đã gửi thành chuỗi thường

Khai báo 1 biến cờ f= 0, 1 biến đếm c= 0;

Đọc từng ký tự: nếu f=0 và ký tự khác space thì f=1 và c++; nếu f=1 và ký tự

là space thì f=0

Trả về giá trị của c

Chường trình client kết nối đến socket của server vừa mở, tạo luồng Output để gửi

dữ liệu và Input để nhận kết quả trả về:

- Nhập chuỗi từ bàn phím

- Gửi chuỗi đến server

- Nhận về 2 chuỗi: HOA, thường và số từ của chuỗi

- In ra màn hình

Trang 22

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 21

str= new String(dp.getData()).substring(0, dp.getLength());

System.out.println("Da nhan chuoi: "+str);

} }

private String upCase(String str){

Trang 23

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 22

for(int i= 0; i< b.length; i++)

//Gửi chuổi đến server

dp= new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("localhost"), 1995);

System.out.println("Chuoi hoa: "+str2);

//Nhận lại chuỗi thường

ds.receive(dp);

Trang 24

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 23

str2= new String(dp.getData()).substring(0, dp.getLength());

System.out.println("Chuoi thuong: "+str2);

//Nhận lại số từ

ds.receive(dp);

str2= new String(dp.getData()).substring(0, dp.getLength());

System.out.println("So tu: "+Integer.valueOf(str2));

} }catch(Exception ex){

ex.printStackTrace();

} }

public static void main(String []args){

Xây dựng chương trình hội thoại Client/Server hoạt động theo giao thức UDP

- Chương trình Client cho phép nhập vào từ bàn phím một chuỗi biễu diễn một phép tính gồm các toán tử +, -, (, )

- Xử lý chuỗi biểu thức theo thuật toán Balan để lấy kết quả

+ Duyệt từng ký tự của chuỗi

Trang 25

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 24

+ Nếu là số thì cộng dồn rồi đẩy vào numStack (number stack), nếu là kí tự (+ - * / ( )) thì đẩy vào opeStack (operator stack)

+ Nếu phép toán đang duyệt có mức ưu tiên thấp hơn phép toán ở đỉnh opeStack thì lấy phép toán trong stack ra cùng với 2 giá trị đầu trong numStack tính toán và đưa giá trị tính được vào lại numStack, sau đó đưa phép toán đang duyệt vào opeStack

+ Nếu gặp ‘)’ thì lấy lần lượt giá trị cùng phép toán trong numStack, opeStack tính toán cho đến khi lấy ra được ( thì đưa giá trị tính được vào lại numStack và xóa ‘(‘ trong opeStack đi

+ Tiếp tục như vậy thì cuối cùng giá trị còn lại trong numStack là giá trị của biểu thức

+ Trả kết quả tính được về cho client

Chường trình client gửi Packet chứ dữ liệu cần xử lý đến Socket của server vừa

mở và chờ nhận Packet chứa kết quả trả về từ Server

- Nhập chuỗi biểu thức từ bàn phím

- Gửi biểu thức đến server

- Nhận về kết quả của biểu thức

str= new String(dp.getData()).substring(0, dp.getLength());

System.out.println("Da nhan chuoi: "+str);

String str2= execute(str);

Trang 26

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 25

//Trả về giá trị cho máy khách

dp= new DatagramPacket(str2.getBytes(), str2.length(), dp.getAddress(), dp.getPort());

ds.send(dp);

System.out.println("Da gui gia tri bieu thuc! ");

} }catch(Exception ex){

ex.printStackTrace();

} }

private String getValue(String a, char o, String b){

float af= Float.valueOf(a), bf= Float.valueOf(b);

switch(o){

case '+': return String.valueOf(af+bf);

case '-': return String.valueOf(af-bf);

case '*': return String.valueOf(af*bf);

private int prio(char c){

Stack<String> numst= new Stack<String>();

Stack<Character> opest= new Stack<Character>();

Trang 27

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 26

while(!opest.isEmpty()){

String n2= numst.pop(), n1=

numst.pop();

numst.push(getValue(n1, opest.pop(), n2));

} }else return num;

} break;

String n2= numst.pop(), n1= numst.pop();

numst.push(getValue(n1, opest.pop(), n2)); }

opest.push(c);

} break;

} }

while(!opest.isEmpty()){

String n2= numst.pop(), n1= numst.pop();

numst.push(getValue(n1, opest.pop(), n2));

} v= numst.pop();

return v;

}

Trang 28

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 27

public static void main(String[]args){

//Gửi biểu thức đến server

dp= new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("localhost"), 1995);

System.out.println("Gia tri bieu thuc: "+str2);

} }catch(Exception ex){

} }

public static void main(String []args){

new Client();

}

}

2.1 Kết quả demo

Trang 29

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 28

3 Câu 3

3.1 Đề bài

Xây dựng chương trình hội thoại chat room Client/Server hoạt động theo giao thức UDP

- Chương trình Server mở cổng chờ nhận kết nối từ Client

Chương trình Client kết nối và thực hiện trao đổi với chương trình Server

3.2 Thuật toán

3.3 Mã nguồn chương trình

- Server.Main:

public class Main extends Thread{

public static Vector<User> users= new Vector<User>();

public static Queue<String> sms= new LinkedList<String>();

public static DatagramSocket ds;

//Tiến trình gửi sms cho tất cả các client

Thread thr= new Thread(){

public void run(){

Trang 30

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 29

u.sendSMS(sms);

} }

} } catch (Exception ex) {

ex.printStackTrace();

} }

}catch(Exception ex){

ex.printStackTrace();

} }

public static void main(String []args){

new Main();

}

}

- Server.User

//Lớp lưu trữ các thông tin của 1 client: tên, địa chỉ, cổng

public class User{

InetAddress ia= null;

Trang 31

SVTH: Nguyễn Đức Vũ-15T1-15Nh11A Page 30

Ngày đăng: 03/08/2019, 11:13

TỪ KHÓA LIÊN QUAN

w