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

Bài giảng lập trình java - Bài 9 potx

11 306 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 11
Dung lượng 71,26 KB

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

Nội dung

Lê đình Thanh, Lập trình socket Nội dung Ớ Truyền thông giữa các ứng dụng Ớ Socket Ớ Lập trình socket Ớ đa luồng 4 Truyền thông giữa các ứng dụng Ứng dụng A1 Ứng dụng B1 Chào B1.. Lê đì

Trang 1

Lê đình Thanh, Lập trình socket

Lê đình Thanh

Bộ môn Mạng và Truyền thông Máy tắnh Khoa Công nghệ Thông tin Trường đại học Công nghệ, đHQGHN

Bài giảng

LẬP TRÌNH JAVA

2

Lập trình socket

Bài 9

Trang 2

Lê đình Thanh, Lập trình socket

Nội dung

Ớ Truyền thông giữa các ứng dụng

Ớ Socket

Ớ Lập trình socket

Ớ đa luồng

4

Truyền thông giữa các ứng dụng

Ứng dụng A1 Ứng dụng B1

Chào B1 Tôi là A1 Bạn cần nói chuyện không

Chào A1 Tôi sẵn sàng

Tôi cần Ầ

đây là thứ bạn cần

Ầ Cảm ơn nhiều nhé Hẹn gặp lại

Ok Hẹn gặp lại

Trang 3

Lê đình Thanh, Lập trình socket

Truyền thông giữa các ứng dụng

Ớ Một ứng dụng (B1) phải chạy trước, chờ xem có ứng dụng khác cần giao tiếp không

Ớ Ứng dụng cần giao tiếp (A1) thiết lập kết nối ựến ứng dụng

lắng nghe (B1)

Ớ Hai bên bàn thảo về một việc gì ựó (theo giao thức)

Ớ A1/B1 muốn kết thúc sẽ chào tạm biệt trước, B1/A1 sẽ tạm biệt lại

6

Truyền thông giữa các ứng dụng

Ứng dụng A1 Ứng dụng B1

Chào B1 Tôi là A1 Bạn cần nói chuyện không

Chào A1 Tôi sẵn sàng

Tôi cần Ầ

đây là thứ bạn cần

Ầ Cảm ơn nhiều nhé Hẹn gặp lại

Ok Hẹn gặp lại

Ứng dụng A2 Ứng dụng B2

Chào B2 Tôi là A2 Bạn cần nói chuyện không

Chào A2 Tôi sẵn sàng

Tôi cần Ầ

đây là thứ bạn cần

Ầ Cảm ơn nhiều nhé Hẹn gặp lại

Ok Hẹn gặp lại

Trang 4

Lê đình Thanh, Lập trình socket

Truyền thông giữa các ứng dụng

Ớ Nhiều ứng dụng có thể chạy ựồng thời trên một máy, sử

dụng cùng ựịa chỉ IP → Làm thế nào ựể phân biệt ựược

gói tin ựến gửi cho ứng dụng nào?

Ớ Giải pháp: Mỗi ứng dụng sử dụng một mã riêng biệt là một

số nguyên không âm ựược gọi là cổng (port)

Ớ Khi ứng dụng bên ngoài cần gửi cho ứng dụng B1, nó phải gửi cả IP của máy B và mã nhận diện của B1 trong gói dữ liệu.

Ớ Khi ứng dụng bên ngoài cần gửi cho ứng dụng B2, nó phải gửi cả IP của máy B và mã nhận diện của B2 trong gói dữ liệu.

IP:port - địa chỉ/ựịnh danh/socket của ứng dụng

8

Socket

IP:port - địa chỉ/ựịnh danh/socket của ứng dụng

Ớ Khi ứng dụng sử dụng cổng nào, nó sẽ ựăng ký với hệ ựiều hành

Ớ Nếu cổng ựã ựược sử dụng, hệ ựiều hành sẽ báo là không thể sử dụng ựược, ứng dụng sẽ dừng chạy hoặc xin cổng khác

Ớ Trong lập trình java:

Ớ Ứng dụng lắng nghe sử dụng ServerSocket và Socket

Ớ Ứng dụng khởi ựộng kết nối sử dụng Socket

Trang 5

Lê đình Thanh, Lập trình socket

Lập trình socket

10

đối tượng Socket

Ớ Mỗi ựối tượng Socket có:

Ớ Một dòng ra: lưu dữ liệu sẽ gửi cho ựối tác nhưng chưa ựược gửi

Ớ Các phương thức gửi dữ liệu = ựưa dữ liệu ra dòng ra, ựẩy dữ liệu cho tầng giao vận (gửi)

Ớ Một dòng vào: lưu dữ liệu do ựối tác gửi ựến

Ớ Các phương thức nhận dữ liệu = ựọc dữ liệu từ dòng vào

Output

Sream

Input Stream

Network

Input

Stream

Socket

Output Sream

Socket TCP/UDP

Trang 6

Lê đình Thanh, Lập trình socket

ServerSocket

//Tạo server socket lắng nghe trên cổng 8080

ServerSocket ssoc = new ServerSocket(8080);

//Chấp nhận kết nối

Socket soc = ssoc.accept();

12

Socket

//Tạo kết nối ựến server socket lắng nghe trên cổng 8080 ở máy

có IP 113.202.99.8

Socket soc = new Socket(Ộ113.202.99.8Ợ, 8080);

//Tham chiếu ựến dòng vào và dòng ra của socket

InputStream sin = soc.getInputStream();

OutputStream sout = soc.getOutputStream();

DataInputStream in = new DataInputStream(sin); DataOutputStream out = new DataOutputStream(sout);

//Gửi dữ liệu cho ựối tác

out.writeUTF(ỘNội dungỢ);

out.flush();

//đọc dữ liệu do ựối tác gửi ựến

String text = in.readUTF();

Trang 7

Lê đình Thanh, Lập trình socket

Giao thức tầng ứng dụng

Ớ Một ứng dụng (B1) phải chạy trước, chờ xem có ứng dụng khác cần giao tiếp không

Ớ Ứng dụng cần giao tiếp (A1) thiết lập kết nối ựến ứng dụng

lắng nghe (B1)

thức)

Ớ A1/B1 cần kết thúc sẽ chào tạm biệt trước, B1/A1 sẽ tạm biệt lại

Giao thức cho ứng dụng cho biết thứ tự, kiểu nội dung các bước gửi/nhận của mỗi bên

14

Vắ dụ: Giao thức xưng danh

Ớ A xuất hiện

Ớ Tên tôi là A

Ớ Tôi sinh ngày 25/12/1990

Ớ Nhận lời chào

Ớ Kết thúc

Ớ B chờ người ựến

Ớ Vui lòng cho biết tên của bạn

Ớ Ghi nhận tên

Ớ Vui lòng cho biết ngày sinh của bạn

Ớ Ghi nhận ngày sinh

Ớ Xin chào A, sinh ngày 25/12/1990.

Ớ Kết thúc

Trang 8

Lê đình Thanh, Lập trình socket

Phắa ghi danh (B)

//lang nghe tren cong 8080

ServerSocket ssoc = new ServerSocket(8080);

System.out.print("Running");

//chap nhan ket noi

Socket soc = ssoc.accept();

//tham chieu den cac dong vao va dong ra

InputStream sin = soc.getInputStream();

OutputStream sout = soc.getOutputStream();

DataInputStream in = new DataInputStream(sin);

DataOutputStream out = new DataOutputStream(sout);

//////////////////////////////// thuc hien giao thuc xung danh ////////////////////////////////

//yeu cau cho biet ten

out.writeUTF("Your name: ");

out.flush();

//ghi nhan ten

String name = in.readUTF();

//yeu cau cho biet ngay sinh

out.writeUTF("Your DOB: ");

out.flush();

//ghi nhan ngay sinh

String dob = in.readUTF();

//thong bao da ghi nhan xong

out.writeUTF("Welcome " + name + " whose DOB is " + dob + "\n");

out.flush();

//ket thuc

in.close();

out.close();

soc.close();

16

Lê đình Thanh, Lập trình socket

Phắa xưng danh (A)

//thiet lap ket noi

Socket soc = new Socket("127.0.0.1", 8080);

//tham chieu den cac dong vao va dong ra

InputStream sin = soc.getInputStream();

OutputStream sout = soc.getOutputStream();

DataInputStream in = new DataInputStream(sin);

DataOutputStream out = new DataOutputStream(sout);

//////////////////////////////// thuc hien giao thuc xung danh ///////////////////////////////////

//doc yeu cau (cho biet ten)

String text = in.readUTF();

System.out.print(text);

//mo mot input stream cho ban phim

Scanner scanner = new Scanner(new BufferedReader(new InputStreamReader(System.in)));

scanner.useDelimiter("\n");

//nhap ten tu ban phim

String name = scanner.next();

//gui ten

out.writeUTF(name);

out.flush();

//doc yeu cau nhap ngay sinh

text = in.readUTF();

System.out.print(text);

//nhap ngay sinh tu ban phim

String dob = scanner.next();

//gui ngay sinh

out.writeUTF(dob);

out.flush();

//doc thong bao da ghi nhan

text = in.readUTF();

System.out.print(text);

Trang 9

Lê đình Thanh, Lập trình socket

đa luồng (Multi-threading)

18

đa luồng

Ớ Một server có thể phải giao tiếp ựồng thời với nhiều clients

Ớ Với mỗi client, server phải chấp nhận một kết nối và thực hiện giao thức ứng dụng trên một luồng

Ớ → server phải tao nhiều luồng xử lý ựồng thời, mỗi luồng

thực hiện một kết nối ựến một client

Trang 10

Lê đình Thanh, Lập trình socket

Phắa ghi danh Ờ Tạo luồng

public class MyThread extends Thread

{

private Socket soc;

public MyThread(Socket socket)

{

super("MyThread");

this.soc = socket;

}

20

Phắa ghi danh Ờ Tạo luồng

public void run()

{

try {

//tham chieu den cac dong vao va dong ra

InputStream sin = soc.getInputStream();

OutputStream sout = soc.getOutputStream();

DataInputStream in = new DataInputStream(sin);

DataOutputStream out = new DataOutputStream(sout);

////////////// thuc hien giao thuc xung danh ///////////////////////

//yeu cau cho biet ten

out.writeUTF("Your name: ");

out.flush();

//ghi nhan ten

String name = in.readUTF();

//yeu cau cho biet ngay sinh

out.writeUTF("Your DOB: ");

out.flush();

//ghi nhan ngay sinh

String dob = in.readUTF();

//thong bao da ghi nhan xong

out.writeUTF("Welcome " + name + " whose DOB is " + dob + "\n");

out.flush();

//ket thuc

in.close();

out.close();

soc.close();

Trang 11

Lê đình Thanh, Lập trình socket

Phắa ghi danh Ờ Chương trình chắnh

public static void main(String[] args) {

try

{

java.net.ServerSocket ssoc = new ServerSocket(8080);

System.out.print("Running");

int count = 0;

while (true)

{

Socket soc = ssoc.accept();

MyThread newthread = new MyThread(soc);

newthread.start();

count ++;

System.out.println("\nClient: " + count);

}

}

catch(Exception e)

{

System.out.print(e);

}

}

22

Tiếp theo

Triển khai ứng dụng

Ngày đăng: 11/08/2014, 09:25

TỪ KHÓA LIÊN QUAN