Tài liệu Lập trình Socket

Chương I: Cơ sở về mạng .1

1. Cấu trúc mạng .1

2. TCP.2

3. UDP .3

4. Các cổng giao tiếp .4

Chương II: Socket .6

1. Tổng quan về Socket .6

1.1. Lịch sử hình thành.6

1.2. Định nghĩa .7

1.3. Nguyên lý hoạt động.7

Chương III. Hỗ trợ lập trình socket trong Java.10

3.1. Ví dụ sử dụng giao thức hướng kết nối TCP: .11

3.2. Ví dụ sử dụng giao thức hướng kết nối TCP: .15

Phần 2. Xây dựng ứng dụng .20

Chương 1. Phân tích thiết kế .20

1. Giới thiệu.20

2. Phân tích hệ thống.20

2.1 Mô hình chung.20

2.2 Mô hình ca sử dụng .21

2.3 Sơ đồ tuần tự.21

2.4 Sơ đồ cộng tác.23

2.5 Biểu đồ lớp.24

Chương 2. Xây dựng chương trình.25

1. Xây dựng chương trình cho Server ( Lớp SocketServer.java).25

2. Xây dựng chương trình cho Client ( Lớp SocketClient.java).26

pdf27 trang | Chuyên mục: Lập Trình Mạng | Chia sẻ: tuando | Lượt xem: 446 | Lượt tải: 0download
Tóm tắt nội dung Tài liệu Lập trình Socket, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
y dựng hai lớp 
TimeServer - Chương trình phía Server 
TimeClient - Chương trình phía Client 
Lớp TimeServer 
import java.io.*; 
import java.net.*; 
import java.util.*; 
public class TimeServer { 
 static DatagramSocket socket; 
 public static void main(String[] argv) { 
 try { 
 - 16 - 
 socket = new DatagramSocket(7654); 
 }catch (SocketException e) { 
 System.err.println("Unable to create socket"); 
 e.printStackTrace(); 
 System.exit(1); 
 } 
 DatagramPacket datagram; 
 datagram = new DatagramPacket(new byte[1], 1); 
 while (true) { 
 try { 
 socket.receive(datagram); 
 respond(datagram); 
 }catch (IOException e) { 
 e.printStackTrace(); 
 } 
 } 
 } 
 static void respond(DatagramPacket request) { 
 ByteArrayOutputStream bs; 
 bs = new ByteArrayOutputStream(); 
 DataOutputStream ds = new DataOutputStream(bs); 
 try { 
 ds.writeLong(System.currentTimeMillis()); 
 }catch (IOException e) { 
 } 
 DatagramPacket response; 
 byte[] data = bs.toByteArray(); 
 response = new DatagramPacket(data, data.length, 
 request.getAddress(), request.getPort()); 
 try { 
 socket.send(response); 
 }catch (IOException e) { 
 // Give up, we've done our best. 
 - 17 - 
 } 
 } 
} 
Tiến trình thực hiện ở đây như sau: 
¾ Tạo socket phía Server để chờ yêu cầu kết nối 
 socket = new DatagramSocket(7654); 
¾ Nhận yêu cầu từ phía Client 
 socket.receive(datagram); 
¾ Gửi trả yêu cầu về cho Client 
 response = new DatagramPacket(data, data.length, 
 request.getAddress(), request.getPort()); 
 socket.send(response); 
Lớp TimeClient 
import java.io.*; 
import java.net.*; 
import java.util.*; 
public class TimeClient { 
 private static boolean usageOk(String[] argv) { 
 argv[] 
 if (argv.length != 1) { 
 String msg = "usage is: " + "TimeClient server-name"; 
 System.out.println(msg); 
 return false; 
 } 
 return true; 
 } 
 public static void main(String[] argv) { 
 if (!usageOk(argv)) 
 System.exit(1); 
 DatagramSocket socket; 
 - 18 - 
 try { 
 socket = new DatagramSocket(); 
 }catch (SocketException e) { 
 System.err.println("Unable to create socket"); 
 e.printStackTrace(); 
 System.exit(1); 
 return; 
 } 
 long time; 
 try { 
 byte[] buf = new byte[1]; 
 socket.send(new DatagramPacket(buf, 1, 
 InetAddress.getByName(argv[0]), 7654)); 
 DatagramPacket response = new DatagramPacket(new byte[8],8); 
 socket.receive(response); 
 ByteArrayInputStream bs; 
 bs = new ByteArrayInputStream(response.getData()); 
 DataInputStream ds = new DataInputStream(bs); 
 time = ds.readLong(); 
 }catch (IOException e) { 
 e.printStackTrace(); 
 System.exit(1); 
 return; 
 } 
 System.out.println(new Date(time)); 
 socket.close(); 
 } 
} 
Tiến trình hoạt động của phía Client như sau: 
¾ Tạo socket 
 socket = new DatagramSocket(); 
¾ Gửi dữ liệu đến Server 
 - 19 - 
 socket.send(new DatagramPacket(buf, 1, 
 InetAddress.getByName(argv[0]), 7654)); 
¾ Nhận dữ liệu trả lời từ Server 
 DatagramPacket response = new DatagramPacket(new byte[8],8); 
 socket.receive(response); 
 - 20 - 
 Phần 2. Xây dựng ứng dụng 
Chương 1. Phân tích thiết kế 
1. Giới thiệu 
 Trong thời đại ngày nay, thông tin liên lạc là một vấn đề vô cùng quan trọng, 
các hệ thống thông tin ra đời đã đáp ứng được phần nào nhu cầu đó. Đặc biệt là 
giao tiếp qua mạng máy tính đã trở thành xu thế thời đại bởi không chỉ là nội 
dung, hình thức, kinh tế mà còn cả bởi tốc độ và tính thuận tiện của nó. 
 Một trong những phương thức trao đổi đang được sử dụng rộng rãi bây giờ 
chính là CHAT(mà ta tạm dịch la tán gẫu) qua mạng. 
 Trên cơ sở tìm hiểu thực tế, và vì điều kiện thời gian không cho phép chúng 
tôi có xây dựng một chương trình CHAT cho mạng LAN dựa trên nền tảng lập 
trình Socket với mô hình Client/Server bằng ngôn ngữ JAVA. 
2. Phân tích hệ thống 
2.1 Mô hình chung 
 Như đã trình bày trên, yêu cầu của bài toán Chat rất ngắn gọn, ở đây về phía 
người chat thì chỉ cần tham gia kết nối với máy chủ(đăng nhập) và nếu được 
phép(đúng Nickname và Password) họ bắt đầu có thể trao đổi thông tin với nhau, 
thay đổi một số giao diện người dùng và nếu không họ có thể thoát ra khỏi hệ 
thống. Còn phía nhà quản lý, anh ta cho phép những ai được quyền tham gia 
mạng Chat và theo dõi chặt chẽ mọi diễn biến của các tiến trình trao đỏi thông tin 
của các khách hàng, thông báo những diễn biến đột xuất như có thêm một khách 
hàng đăng nhập hay nột khách hàng rời khỏi hệ thống và ghi lại nhật ký của tiến 
trình các khách hàng tham gia trên mạng. 
 Như vậy, chương trình được xây dựng cho hai lớp đối tượng cơ bản là phía 
máy Client và phía máy Server. Mỗi đối tượng sẽ có các chức năng riêng thực 
hiện các vấn đề của bài toán CHAT qua mạng. 
 Với Server, nó phải quản lý chung các thao tác mà Client đưa tới. Để làm điều 
này Server phải mở một cổng và sẽ lắng nghe trên đó. Khi nhận được thông tin từ 
phía Client qua cổng nó sẽ phải kiểm tra đăng nhập và ra các quyết định cần thiết, 
đồng thời nó cũng luôn theo dõi các tiến trình của máy Client như các quá trình 
vào ra và ghi lại nhật ký, gửi các message tới các Client khác, đưa các thông tin 
đăng nhập tới các máy khách,...Phía Client khi tham gia mạng phải kết nối tới 
Server, nếu thành công thì sẽ bắt đầu tiến trình trao đổi thông điệp do Server quản 
lý, đồng thời nó có quyền thiết lập một số thuộc tính về giao diện. 
 Khi một Client ngắt kết nối, Server sẽ đưa thông báo tới tất cả các máy Client 
khác trên mạng mà còn đang kết nối, các máy này sẽ có các thông báo về máy rời 
khỏi mạng. 
 Như vậy, toàn bộ tiến trình của hệ thống sẽ gồm các công đoạn chính như sau: 
¾ Server mở cổng và lắng nghe trên cổng đó 
 - 21 - 
¾ Client tham gia đăng nhập kết nối với Server trên cổng đã mở thông qua 
Nickname và Password được cung cấp bởi Server 
¾ Client bắt đầu quá trình trao đổi thông điệp với nhau bằng cách gửi thông 
điệp tới Server và Server sẽ gửi thông diệp đó tới Client nhận (nếu gửi 
theo kiểu cá nhân) hoặc gửi cho tất cả các Client trên mạng(nếu Client đó 
gửi theo kiểu công cộng). Một Client kết nối thành công sẽ được Server 
thông báo cho tất cả các Client kết nối trước đó biết và Server sẽ ghi lại 
các quá trình này trong nhật ký của nó. 
¾ Khi một Client không tham gia nữa, Server sẽ đóng kết nối và thông báo 
tới tất cả các Client còn đang tham gia trên mạng 
2.2 Mô hình ca sử dụng 
 Trên cơ sở mô hình như trên, chúng tôi xây dựng mô hình ca sử dụng như sau: 
 Các Actor trong mô hình: 
¾ Client 
¾ Server 
 Các khung nhìn: 
¾ Đăng nhập 
¾ Trao đổi thông điệp 
¾ Kết thúc(Thoát khỏi hệ thống) 
Ta có mô hình ca sử sụng của hệ thống chat như sau: 
Hình 1: Mô hình ca sử dụng của hệ thống chat 
 2.3 Sơ đồ tuần tự 
™ Đăng nhập: 
D a n g n h a p
T ra o d o i T D
C lie n t
K e t t h u c C h a t
S e rve r
 - 22 - 
Client Server
Gui yeu cau ket noi
Kiem tra Nickname & Password
G ui N ick va PassW ord
Cho dang nhap hoac huy bo
Hình 2: Sơ đồ tuần tự của quá trình đăng nhập hệ thống 
™ Trao đổi thông điệp: 
Client1 S erver Client2
G ui t hong diep cho Client2 gui cho Client2
Gui cho Client1
Gui cho Client1
Gu i toi t at ca Client Gui cho tat ca Client
Hình 3: Sơ đồ tuần tự của quá trình trao đồi thông điệp 
 - 23 - 
™ Thoát kết nối: 
Client1 Server Client2
Gui hanh dong thoat
Dap ung, Dong ket noi
Thong bao cho Client2 biet
Hình 4: Sơ đồ tuần tự của quá trình kết thúc ra khỏi hệ thống 
2.4 Sơ đồ cộng tác 
 : Processing
 : AdminManager
Mo cong& Lang nghe
 : Us erList
 : Setting
1: yeu cau ket noi
2: Dap ung yeu cau
Lay thong tin thiet lap
lay thong tin User
Hình5: Sơ đồ cộng tác của hệ thống 
 - 24 - 
2.5 Biểu đồ lớp 
Hình 6: Biểu đồ lớp của hệ thống 
C h a t S e rve r
C lie n t S e t t in g
C l ie n t S e t t in g ()
S o c k e t C l ie n t
S oc k e t C li e nt ()
m a in ()
S o c k e t S e rve r
m a in ()
S o c k e t S e rve r()
B a s e C lie n t
B a s e S erv er
C h a t C l ie nt
C h a t M e s s a g e
C h a t M e s s a g e ()
L o g o n F a i le d E x c e p t io n
L o g o n F a il e dE x c e p t io n ()
 - 25 - 
Chương 2. Xây dựng chương trình 
 Chương trình dưới đây dược thiết kế trên cơ sỏ lập trình Socket và tham 
khảo các tài liệu sau: 
™ Lập trình hướng đối tượng với Java - TS. Đoàn Văn Ban – Viện 
CNTT 
™ Kỹ thuật lập trình Java - KS. Đậu Quang Tuấn và Nguyễn Viết Linh 
™ Lập trình mạng bằng Java - Trung tâm tin hoc Trí Đức 
™ Thinking in Java 
™ Java tutorial - Sun 
Sau đây ta đi xây dựng chương trình 
1. Xây dựng chương trình cho Server ( Lớp SocketServer.java) 
 Server sẽ làm nhiệm vụ lắng nghe các yêu cầu kết nối từ các Client trên một 
cổng cụ thể thông qua đối tượng ServerSocket, các yêu cầu kết nối được kiểm tra, 
xếp vào hàng đợi và chờ Server chấp nhận. 
 Ta có sơ đồ thiết kế cơ bản của lớp SocketServer như sau: 
Lắng nghe các kết
nối trên cổng 2222
Chấp nhận kết nối
và trả về Socket
tương ứng
Khởi tạo Thread
phục vụ kết nối 
Khởi tạo dòng 
xuất 
Socket và dòng 
xuất được quản lý 
trong bảng băm 
 - 26 - 
2. Xây dựng chương trình cho Client ( Lớp SocketClient.java) 
 Ta thiết kế một giao diện người sử dụng bao gồm một vùng nhập thông điệp, 
một vùng hiển thị thông điệp, một vùng hiển thị danh sách các User tham gia 
mạng, hai nút lệnh gửi thông điệp và nút thoát. Thiết lập một Socket yêu cầu kết 
nối tới Server với Nickname, tên máy chủ và cổng dịch vụ xác định. Sau khi kết 
nối được chấp nhận, nó tạo ra hai dòng xuất và nhập tương ứng với socket này. 
hai dòng xuất và nhập làm nhiệm cụ nhận và gửi thông điệp. 
 Ta có sơ đồ thiết kế cơ bản sau: 
Chi tiết về chương trình sẽ được giới thiệu cụ thể riêng với các file kèm theo. 
Tạo đối tượng Server yêu 
cầu kết nối tới máy chủ 
Thiết lập dòng xuất 
nhập tương ứng 
Thêm dữ liệu vào
vùng nhập 
Đọc dữ liệu từ dòng nhập
Lấy chuỗi ký tự từ 
vùng nhập và gửi tới 
Server trên dòng xuất 
Client
Lắng nghe sự kiện 
người sử dụng nhấn 
chuột 

File đính kèm:

  • pdftai_lieu_lap_trinh_socket.pdf