sử dụng socket trong java xây dựng chương trình chat room theo mô hình – Tài liệu text

sử dụng socket trong java xây dựng chương trình chat room theo mô hình client-server

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (541.7 KB, 48 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN MẠNG VÀ TRUYỀN THÔNG
 
ĐỒ ÁN MÔN HỌC
LẬP TRÌNH MẠNG MÁY TÍNH
ĐỀ TÀI
Sử dụng Socket trong Java xây dựng chương trình CHAT
Room theo mô hình Client-Server
GVHD : TRẦN HỒ THỦY TIÊN
Sinh viên : Trần Anh Tuấn
Lớp : 06T3
Nhóm : 09B
Đà Nẵng 2011
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
MỤC LỤC
MỤC LỤC 2
DANH MỤC HÌNH 3
TỔNG QUAN VỀ ĐỀ TÀI 4
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23
1. NHỮNG KẾT QUẢ ĐẠT ĐƯỢC 23
2. NHỮNG VẤN ĐỀ TỒN TẠI 23
3. HƯỚNG PHÁT TRIỂN 23
PHỤ LỤC 24
1. CHƯƠNG TRÌNH SERVER: 24
1.1. Chatserver class: 24
1.2. serverSocket class: 27
2. CHƯƠNG TRÌNH CLIENT 29
2.1. Client class: 29
2.2. ClientLogin class: 38

2.3. clientSocket 43
TÀI LIỆU THAM KHẢO 48
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 2
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
DANH MỤC HÌNH
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 3
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
TỔNG QUAN VỀ ĐỀ TÀI
1. Bối cảnh và lý do thực hiện đề tài
Ngày nay, nhu cầu về công nghệ thông tin trong đời sống là đa dạng.
Việc mở rộng các hệ thống truyền thông và ngày có nhiều máy vi tính kết
nối vào mạng Internet. Với việc ứng dụng giao thức TCP/IP làm cho hệ
thống mạng ngày càng rộng hơn và phát triển vượt bật. Vấn đề đề an ninh,
bảo mật,…là một thế mạnh của giao thức này đem lại cho công nghệ truyền
thông.
Bên cạnh việc phát triển của thư điện tử bằng nhiều dịch vụ khác
nhau(gmail, yahoo,MSM trong mạng điện thoại di động…), việc CHAT trực
tuyến và gửi flie trực tiếp trên Internet cũng là nhu cầu không thể thiếu.
Với thực tế như vậy, nhóm chúng em đã nghiên cứu và xây dựng mô
hình CHAT và truyền file trong mạng LAN.
2. Phương pháp triển khai đề tài
Ngôn ngữ lập trình :
Java
Chương trình soạn thảo và build :
NetBeans IDE
Sử dụng
Giao thức TCP/IP
Sử dụng Socket trong Java

3. Kết cấu của đồ án
Gồm ba chương:
Chương 1: Cơ sở lý thuyết
Chương 2: Thiết kế và xây dựng hệ thống
Chương 3: Triển khai và đánh giá kết quả
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 4
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Chương 1.1. CƠ SỞ LÝ THUYẾT
1.1.1. Giao thức TCP/IP
TCP/IP là tên chung cho một tập hợp hơn 100 giao thức được sử dụng
để kết nối các máy tính vào mạng, trong đó hai giao thức chính là TCP
(Transmission Control Protocol) và IP (Internet Protocol).
Trong phạm vi Internet, thông tin không được truyền tải như một dòng
riêng biệt từ máy tính này tới máy tính khác. Thay vào đó, dữ liệu được chia
thành những gói nhỏ gọi là packet.
Các packet này được gửi trên mạng máy tính. Công việc của IP là
chuyển chúng đến các máy tính ở xa. Tại trạm cuối, TCP nhận các packet và
kiểm tra lỗi. Nếu một lỗi xuất hiện, TCP yêu cầu gói riêng biệt đó phải được
gửi lại. Chỉ khi tất cả các packet đã nhận được là đúng, TCP sẽ sử dụng số
thứ tự để tạo lại thông tin ban đầu.
Hình 1: Sơ đồ TCP/IP
1.1.1.1. Giao thức IP(Internet Protocol – Giao thức Liên mạng)
Là một giao thức hướng dữ liệu được sử dụng bởi các máy chủ nguồn và
đích để truyền dữ liệu trong một liên mạng chuyển mạch gói.
Dữ liệu trong một liên mạng IP được gửi theo các khối được gọi là các
gói (packet hoặc datagram). Cụ thể, IP không cần thiết lập các đường truyền
trước khi một máy chủ gửi các gói tin cho một máy khác mà trước đó nó
chưa từng liên lạc với.
Giao thức IP cung cấp một dịch vụ gửi dữ liệu không đảm bảo (còn gọi

là cố gắng cao nhất), nghĩa là nó hầu như không đảm bảo gì về gói dữ liệu.
Gói dữ liệu có thể đến nơi mà không còn nguyên vẹn, nó có thể đến không
theo thứ tự (so với các gói khác được gửi giữa hai máy nguồn và đích đó), nó
có thể bị trùng lặp hoặc bị mất hoàn toàn. Nếu một phần mềm ứng dụng cần
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 5
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
được bảo đảm, nó có thể được cung cấp từ nơi khác, thường từ các giao thức
giao vận nằm phía trên IP.
Các thiết bị định tuyến liên mạng chuyển tiếp các gói tin IP qua các
mạng tầng liên kết dữ liệu được kết nối với nhau. Việc không có đảm bảo về
gửi dữ liệu có nghĩa rằng các chuyển mạch gói có thiết kế đơn giản hơn.
(Lưu ý rằng nếu mạng bỏ gói tin, làm đổi thứ tự hoặc làm hỏng nhiều gói tin,
người dùng sẽ thấy hoạt động mạng trở nên kém đi. Hầu hết các thành phần
của mạng đều cố gắng tránh để xảy ra tình trạng đó. Đó là lý do giao thức
này còn được gọi là cố gắng cao nhất. Tuy nhiên, khi lỗi xảy ra không
thường xuyên sẽ không có hiệu quả đủ xấu đến mức người dùng nhận thấy
được.)
Giao thức IP rất thông dụng trong mạng Internet công cộng ngày nay.
Giao thức tầng mạng thông dụng nhất ngày nay là IPv4; đây là giao thức IP
phiên bản 4. IPv6 được đề nghị sẽ kế tiếp IPv4: Internet đang hết dần địa chỉ
IPv4, do IPv4 sử dụng 32 bit để đánh địa chỉ (tạo được khoảng 4 tỷ địa chỉ);
IPv6 dùng địa chỉ 128 bit, cung cấp tối đa khoảng 3.4×1038 địa chỉ . Các
phiên bản từ 0 đến 3 hoặc bị hạn chế, hoặc không được sử dụng. Phiên bản 5
được dùng làm giao thức dòng (stream) thử nghiệm. Còn có các phiên bản
khác, nhưng chúng thường dành là các giao thức thử nghiệm và không được
sử dụng rộng rãi.
Địa chỉ IP được chia thành 4 số giới hạn từ 0 – 255. Mỗi số được lưu bởi
1 byte – > IP có kích thước là 4byte, được chia thành các lớp địa chỉ. Có 3 lớp
là A, B, và C. Nếu ở lớp A, ta sẽ có thể có 16 triệu điạ chỉ, ở lớp B có 65536

địa chỉ. Ví dụ: Ở lớp B chúng ta có tất cả các địa chỉ từ 132.25.0.0 đến
132.25.255.255. Phần lớn các địa chỉ ở lớp A là sở hữu của các công ty hay
của tổ chức. Một ISP thường sở hữu một vài địa chỉ lớp B hoặc C. Ví dụ: Nếu
địa chỉ IP của bạn là 132.25.23.24 thì bạn có thể xác định ISP của bạn là ai.
(có IP là 132.25.x.)
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 6
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 2 : Cấu trúc Header của IP
1.1.1.2. Giao thức TCP(Transmission Control Protocol – “Giao thức điều khiển truyền vận”)
Là một trong các giao thức cốt lõi của bộ giao thức TCP/IP. Sử dụng
TCP, các ứng dụng trên các máy chủ được nối mạng có thể tạo các “kết nối”
với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin. Giao thức
này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng
thứ tự. TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịch
vụ Web và dịch vụ thư điện tử) đồng thời chạy trên cùng một máy chủ.
TCP hỗ trợ nhiều giao thức ứng dụng phổ biến nhất trên Internet và các
ứng dụng kết quả, trong đó có WWW, thư điện tử và Secure Shell.
Trong bộ giao thức TCP/IP, TCP là tầng trung gian giữa giao thức IP
bên dưới và một ứng dụng bên trên. Các ứng dụng thường cần các kết nối
đáng tin cậy kiểu đường ống để liên lạc với nhau, trong khi đó, giao thức IP
không cung cấp những dòng kiểu đó, mà chỉ cung cấp dịch vụ chuyển gói tin
không đáng tin cậy. TCP làm nhiệm vụ của tầng giao vận trong mô hình OSI
đơn giản của các mạng máy tính.
Các ứng dụng gửi các dòng gồm các byte 8-bit tới TCP để chuyển qua
mạng. TCP phân chia dòng byte này thành các đoạn (segment) có kích thước
thích hợp (thường được quyết định dựa theo kích thước của đơn vị truyền
dẫn tối đa (MTU) của tầng liên kết dữ liệu của mạng mà máy tính đang nằm
trong đó). Sau đó, TCP chuyển các gói tin thu được tới giao thức IP để gửi nó
qua một liên mạng tới mô đun TCP tại máy tính đích. TCP kiểm tra để đảm

bảo không có gói tin nào bị thất lạc bằng cách gán cho mỗi gói tin một “số
thứ tự” (sequence number). Số thứ tự này còn được sử dụng để đảm bảo dữ
liệu được trao cho ứng dụng đích theo đúng thứ tự. Mô đun TCP tại đầu kia
gửi lại “tin báo nhận” (acknowledgement) cho các gói tin đã nhận được thành
công; một “đồng hồ” (timer) tại nơi gửi sẽ báo time-out nếu không nhận được
tin báo nhận trong khoảng thời gian bằng một round-trip time (RTT), và dữ
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 7
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
liệu (được coi là bị thất lạc) sẽ được gửi lại. TCP sử dụng checksum (giá trị
kiểm tra) để xem có byte nào bị hỏng trong quá trình truyền hay không; giá
trị này được tính toán cho mỗi khối dữ liệu tại nơi gửi trước khi nó được gửi,
và được kiểm tra tại nơi nhận.
Hình 3 : Cấu trúc header cua TCP
1.1.2. Mô hình Client/Server
Mô hình được phổ biến nhất và được chấp nhận rộng rãi trong các
hệ thống phân tán là mô hình client/server. Trong mô hình này sẽ có một tập
các tiến trình mà mỗi tiến trình đóng vai trò như là một trình quản lý tài
nguyên cho một tập hợp các tài nguyên cho trước và một tập hợp các tiến
trình client trong đó mỗi tiến trình thực hiện một tác vụ nào đó cần truy xuất
tới tài nguyên phần cứng hoặc phần mềm dùng chung. Bản thân các trình
quản lý tài nguyên cần phải truy xuất tới các tài nguyên dùng chung được
quản lý bởi một tiến trình khác, vì vậy một số tiến trình vừa là tiến trình
client vừa là tiến trình server. Các tiến trình phát ra các yêu cầu tới các
server bất kỳ khi nào chúng cần truy xuất tới một trong các tài nguyên của
các server. Nếu yêu cầu là đúng đắn thì server sẽ thực hiện hành động được
yêu cầu và gửi một đáp ứng trả lời tới tiến trình client.
Mô hình client/server cung cấp một cách tiếp cận tổng quát để chia
sẻ tài nguyên trong các hệ thống phân tán. Mô hình này có thể được cài đặt
bằng rất nhiều môi trường phần cứng và phần mềm khác nhau. Các máy tính

được sử dụng để chạy các tiến trình client/server có nhiều kiểu khác nhau và
không cần thiết phải phân biệt giữa chúng; cả tiến trình client và tiến trình
server đều có thể chạy trên cùng một máy tính. Một tiến trình server có thể
sử dụng dịch vụ của một server khác.
Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ. Quá
trình trao đổi dữ liệu bao gồm:
1. Truyền một yêu cầu từ tiến trình client tới tiến trình server
2. Yêu cầu được server xử lý
3. Truyền đáp ứng cho client
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 8
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Mô hình truyền tin này liên quan đến việc truyền hai thông điệp và
một dạng đồng bộ hóa cụ thể giữa client và server. Tiến trình server phải
nhận thức được thông điệp được yêu cầu ở bước một ngay khi nó đến và
hành động phát ra yêu cầu trong client phải được tạm dừng (bị phong tỏa) và
buộc tiến trình client ở trạng thái chờ cho tớ khi nó nhận được đáp ứng do
server gửi về ở bước ba.
Mô hình client/server thường được cài đặt dựa trên các thao tác cơ
bản là gửi (send) và nhận (receive)
Hình 4 : Mô hình client/server
Quá trình giao tiếp client và server có thể diễn ra theo một trong hai chế
độ: bị phong tỏa (blocked) và không bị phong tỏa (non-blocked).
Chế độ bị phong tỏa (blocked):
Trong chế độ bị phong tỏa, khi tiến trình client hoặc server phát ra lệnh
gửi dữ liệu (send), việc thực thi của tiến trình sẽ bị tạm ngừng cho tới khi tiến
trình nhận phát ra lệnh nhận dữ liệu (receive).
Tương tự đối với tiến trình nhận dữ liệu, nếu tiến trình nào đó (client
hoặc server) phát ra lệnh nhận dữ liệu, mà tại thời điểm đó chưa có dữ liệu
gửi tới thì việc thực thi của tiến trình cũng sẽ bị tạm ngừng cho tới khi có dữ

liệu gửi tới.
Chế độ không bị phong tỏa (non-blocked)
Sinh Viên: Trần Anh Tuấn – Lớp 06t3 9
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Trong chế độ này, khi tiến trình client hay server phát ra lệnh gửi dữ
liệu thực sự, việc thực thi của tiến trình vẫn được tiến hành mà không quan
tâm đến việc có tiến trình nào phát ra lệnh nhận dữ liệu đó hay không.
Tương tự cho trường hợp nhận dữ liệu, khi tiến trình phát ra lệnh nhận
dữ liệu, nó sẽ nhận dữ liệu hiện có, việc thực thi của tiến trình vẫn được tiến
hành mà không quan tâm đến việc có tiến trình nào phát ra lệnh gửi dữ liệu
tiếp theo hay không.
1.1.3. Cơ chế Socket trong Java
1.1.3.1. Khái quát về Socket
Như chúng ta đã biết kết nối URLs và URL cung cấp cho chúng ta một
cơ cấu để truy xuất vào các tài nguyên trên Internet ở một mức tương đối
cao, nhưng đôi khi chương trình của chúng ta lại yêu cầu một giao tiếp ở tầng
mạng mức thấp.Ví dụ khi chúng ta viết một ứng dụng client-server.
Trong một ứng dụng client-server thì phía server sẽ cung cấp một số
dịch vụ, như: xử lí cơ sở dữ liệu, các yêu cầu bên phía client đưa ra, sau đó sẽ
gửi lại cho phía client. Sự giao tiếp như vậy gọi là tin cậy bởi vì dữ liệu sẽ
không bị mất mát, sai lệch trong quá trình truyền, server gửi cho client thông
điệp gì thì phía client sẽ nhận được thông điệp nguyên như vậy. Giao thức
TCP sẽ cung cấp cho chúng ta một cách thức truyền tin cậy. Để có thể nói
chuyện được trên TCP thì chương trình client và chương trình server phải
thiếp lập một đường truyền, và mỗi chương trình sẽ phải kết nối lại với
socket là điểm cuối để kết nối, client và server muốn nói chuyện với nhau thì
sẽ phải thông qua socket, mọi thông điệp sẽ phải đi qua socket. Chúng ta cứ
mường tượng socket ở đây là một cái cửa mọi người muốn đi ra hay đi vào
đều phải thông qua cái cửa này.

1.1.3.2. Cơ chế Socket
Một socket là một điểm cuối của thông tin hai chiều liên kết giữa hai
chương trình đang chạy trên mạng. Những lớp socket được dùng để đại diện
cho kết nối giữa một chương trình client và một chương trình server. Trong
Java gói Java.net cung cấp hai lớp Socket và ServerSocket để thực hiện kết
nối giữa client và server.
Thông thường thì server sẽ chạy trên một máy đặc biệt và có một socket
giới hạn trong 1 Portnumber đặc biệt.
Phía client: client được biết hostname của máy mà server đang chạy và
port number mà server đang lắng nghe. Để tạo một yêu cầu kết nối client sẽ
thử hẹn gặp server ở trên máy của server thông qua port number. Client
cũng cần xác định chính nó với server thông qua local port number.
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
10
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 5 : Client gửi yêu cầu kết nối tới Server
Nếu mọi thứ tốt đẹp thì server sẽ đồng ý kết nối. khi đồng ý kết nối thì
server sẽ tạo ra một socket mới để nói chuyện với client và cũng tạo ra một
socket khác để tiếp tục lắng nghe.
Hình 6 : Server đồng ý kết nối và tiếp tục lắng nghe.
1.1.3.3. Mô hình truyền tin socket
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
11
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 7 : Mô hình truyền tin socket
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
12
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy

Tiên
Hình 8 : Mô hình tương tác giữa client/server qua socket TCP
Một socket có thể thực hiện bảy thao tác cơ bản:
Kết nối với một máy ở xa (ví dụ, chuẩn bị để gửi và nhận dữ liệu)
Gửi dữ liệu
Nhận dữ liệu
Ngắt liên kêt
Gán cổng
Nghe dữ liệu đến
Chấp nhận liên kết từ các máy ở xa trên cổng đã được gán
Lớp Socket của Java được sử dụng bởi cả client và server, có các
phương thức tương ứng với bốn thao tác đầu tiên. Ba thao tác cuối chỉ cần
cho server để chờ các client liên kết với chúng. Các thao tác này được cài đặt
bởi lớp ServerSocket. Các socket cho client thường được sử dụng theo mô
hình sau:
Một socket mới được tạo ra bằng cách sử dụng hàm Socket().
Socket cố gắng liên kết với một host ở xa.
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
13
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Mỗi khi liên kết được thiết lập, các host ở xa nhận các luồng vào và
luồng ra từ socket, và sử dụng các luồng này để gửi dữ liệu cho nhau. Kiểu
liên kết này được gọi là song công (full-duplex)-các host có thể nhận và gửi
dữ liệu đồng thời. Ý nghĩa của dữ liệu phụ thuộc vào giao thức.
Khi việc truyền dữ liệu hoàn thành, một hoặc cả hai phía ngắt liên kết.
Một số giao thức, như HTTP, đòi hỏi mỗi liên kết phải bị đóng sau mỗi khi
yêu cầu được phục vụ. Các giao thức khác, chẳng hạn FTP, cho phép nhiều
yêu cầu được xử lý trong một liên kết đơn.
1.1.3.4. Một số hàm cơ bản trong socket

Class mô tả về socket
– Tạo một socket
Socket(InetAddress address, int port)
Socket(String host, int port)
Socket(InetAddress address, int port, InetAddress, localAddr, int
localPort)
Socket(String host, int port, InetAddress, localAddr, int localPort)
Socket()

– Lấy thông tin về một socket
InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đến
int getPort() : trả về địa chỉ mà socket kết nối đến.
InetAddress getLocalAddress() : trả về địa chỉ cục bộ.
int getLocalPort() : trả về địa chỉ cục bộ.
– Sử dụng Streams
public OutputStream getOutputStream() throws IOException: Trả về
một output stream cho việc viết các byte đến socket này.
public InputStream getInputStream() throws IOException : Trả về
một input stream cho việc đọc các byte từ socket này.
ServerSocket class
– Class mô tả ServerSocket
Tạo một ServerSocket
ServerSocket(intport) throws IOException ServerSocket(intport,
intbacklog) throws IOException ServerSocket(intport, intbacklog,
InetAddressbindAddr) throws IOException
– Các phương thức trong ServerSocket
Socket accept() throws IOException: lắng nghe một kết nối đến socket
này và có chấp nhận nó hay không
void close() throws IOException: Ðóngsocket.
InetAddress getInetAddress() : trả về địa chỉ cục bộ của socket

int getLocalPort() : trả về port mà server đang lắng nghe
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
14
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 9 : Ví dụ về một chương trình socket TCP
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
15
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 10 : Ví dụ về một chương trình socket TCP
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
16
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Chương 1.2. THIẾT KẾ VÀ XÂY DỰNG HỆ
THỐNG
1.2.1. Phân tích yêu cầu
– Yêu cầu của bài toán: Xây dựng mô hình Client – Server ứng dụng
CHAT
– Xây dựng chương trình Server
Tạo một TCP Socket và gắn vào một cổng
Xây dựng một chương trình Server đa tuyến (Threaded Server) để cho
phép nhiều Client kết nối tới Server.Mỗi tuyến đảm nhận liên lạc với Client.
Chờ và lắng nghe yêu cầu kết nối từ Client
Chấp nhận kết nối và nhận Socket tương ứng.
Truyền nhận thông tin qua các luồng nhận/gửi dữ liệu của socket.
Khi một user login vào Server thì Server sẻ cập nhật user đó và gửi tới
các Client đang kết nối
Khi một user logout ra khỏi Server thì Server hiện thông báo user đó đã

logout và gửi tới Client.
Đóng kết nối.
– Xây dựng chương trình Client.
Tạo một TCP Socket với địa chỉ IP và số cổng mà chương trình Server
đang chạy
Thiết lập kết nối tới Server
Trao đổi dữ liệu với Server.
Cập nhật các user khác vừa logint/logout.
Gửi/ nhận thông điệp tới tất cả mọi người có trong phòng chát
Đóng kết nối
Thiết kế giao diện hiển thị khung chat phía Client.
– Sử dụng giao thức TCP/IP
– Yêu cầu giao diện:
Vùng thao tác chuỗi(CHAT):
CHAT trực tiếp giữa Client và Server khi được kết nối.
Trao đổi dữ liệu với nhau nhờ vào Stream nhập và Stream xuất.
1.2.2. Phân tích các chức năng
Chức năng của chương trình được thể hiện qua chương trình Client và
Server.
Chức năng Chat trong mạng LAN:
Chuỗi ký tự nhập từ bàn phím.
Ấn nút “Send” để gửi chuỗi ký tự vừa nhập để giao tiếp với nhau giữa
Client và Server.
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
17
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Xây dựng chương trình Client: nối kết đến Server trong mạng để trao
đổi thông tin và truyền tải dữ liệu.
Xây dựng chương trình Server đa tuyến để kết nối với nhiều Client:

Xử lý các yêu cầu nối kết: lắng nghe yêu cầu nối kết của Client.
Xử lý các thông điệp yêu cầu từ Client: chấp nhận hoặc từ chối nối kêt.
1.2.3. Thiết kế kế chương trình
1.2.3.1. Thiết kế giao diện
Hình 11: Giao diện login
Hình 12: Giao diện Chat room
Server ip/host name: địa chỉ ip hay hostname của Server (mặc định là
địa chỉ localhost).
Port : số hiệu cổng kết nối
Chat ID: nickname dùng để đăng nhập
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
18
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Send All : thông tin Chat sẽ được gửi tới tất cả các user trong phòng
Chat
Send PM: thông tin Chat sẽ được gửi tới user được chỉ định trong
phòng Chat
File/Exit : thoát khỏi phòng Chat
1.2.3.2. Xây dựng các chức năng
Xây dựng chương trình Client(sử dụng lớp java.net.Socket):
Mở một socket nối kết đến Server đã biết địa chỉ IP/localhost và số hiệu
cổng(9999).
Lấy Stream nhập và Stream xuất được gán với socket.
Trao đổi dữ liệu với Server nhờ vào các Stream nhập và Stream xuất.
Dùng giao thức TCP/IP để kiểm tra dữ liệu trao đổi với Server.
Xây dựng chương trình Server đa tuyến(Server phải luôn giữ kết nối)
Xử lý các yêu cầu nối kết:
Lắng nghe yêu cầu nối kết.
Chấp nhận một yêu cầu nối kết.

Tạo kênh giao tiếp ảo với các Client.
Xử lý các thông điệp yêu cầu từ Client.
Xử lý các thông điệp yêu cầu từ Client:
Chờ nhận thông điệp của các Client.
Phân tích và xử lý yêu cầu.
Gửi thông điệp trả lời cho Client.
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
19
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Chương 1.3. TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
1.3.1. Môi trường triển khai
Hệ điều hành Microsoft Windowns 7 profesional, Microsoft Windowns.
XP.
Eclipse , Netbeans
JDK 1.5
Mạng LAN
1.3.2. Kết quả các chức năng của chương trình
Hình 13 : Kết nối lỗi khi Server chưa chạy
Hình 14 : Chạy chương trình server
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
20
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 15 : Login thành công vào phòng Chat
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
21
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
Hình 16 : Thử nghiệm Chat private

Hình 17 : Hiển thị thông báo login và logout trên Server
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
22
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1. Những kết quả đạt được
– Mô phỏng được mô hình Client-Server trong mạng LAN.
– Thực hiện được yêu cầu bài đề ra(CHAT ROOM).
– Dùng giao thức TCP/IP trong truyền dữ liệu.
– Thực hiện được việc kiểm tra trong nối kêt giữa Client-Server.
2. Những vấn đề tồn tại
– Chương trình Chat còn đơn giản
– Giao diện sơ sài
– Chỉ thực hiện được nối kết giữa Client-Server(theo mô hình).
3. Hướng phát triển
– Hoàn thiện giao diện đẹp và phù hợp với người dùng.
– Mở rộng ứng dụng trong chương trình Chat như :
+ Xử lý truyền file thông qua chương trình Chat
+ Xây dựng hệ cơ sở dữ liệu quản lý thông tin đăng nhập
( username, password …)
– Phát triển trên mạng rộng ngoài LAN.
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
23
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
PHỤ LỤC
1. Chương trình Server:
1.1. Chatserver class:
/*

* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package server;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author anhtuan
*/
public class chatserver implements Runnable{
serverSocket sThread[] = new serverSocket[50];
int maxClient = 0;
public synchronized void send(String username,String message){
if ( username.equals(“send_to_all”)) {
for(int i=0; i<maxClient; i++){
if (sThread[i].active){
sThread[i].send(message);
}
}
}
else{
for(int i=0; i<maxClient; i++){
if
((sThread[i].active)&&(sThread[i].userID.equals(username))){
sThread[i].send(message);

}
}
}
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
24
Đồ Án Lập Trình Mạng GVHD : Trần Hồ Thủy
Tiên
}
public synchronized void sendToOther(String username, String
message){
for(int i=0; i<maxClient; i++){
if ((sThread[i].active)&&(!
sThread[i].userID.equals(username))){
sThread[i].send(message);
}
}
}
public String getAliveHost(){
String result = “”;
for ( int i=0; i<maxClient; i++) {
if ( sThread[i].active ) {
result += sThread[i].userID + “|”;
}
}
String myresult = “”;
for (int i =0; i<result.length()-1; i++) {
myresult = myresult + result.charAt(i);
}
// System.out.println(“Return : ” + myresult);
return myresult;

}
public void run() {
System.out.println(“CHAT SERVER IS STARTING “);
try {
ServerSocket ss = new ServerSocket(9999);
boolean result;
while (true){
Socket socket = ss.accept();
DataInputStream input = new
DataInputStream(socket.getInputStream());
DataOutputStream output= new
DataOutputStream(socket.getOutputStream());
String inputString = input.readUTF();
//
// Command :
// request_login|username
// send_all|message
Sinh Viên: Trần Anh Tuấn – Lớp 06t3
25

2.3. clientSocket 43TÀI LIỆU THAM KHẢO 48Sinh Viên: Trần Anh Tuấn – Lớp 06t3 2Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênDANH MỤC HÌNHSinh Viên: Trần Anh Tuấn – Lớp 06t3 3Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênTỔNG QUAN VỀ ĐỀ TÀI1. Bối cảnh và lý do thực hiện đề tàiNgày nay, nhu cầu về công nghệ thông tin trong đời sống là đa dạng.Việc mở rộng các hệ thống truyền thông và ngày có nhiều máy vi tính kếtnối vào mạng Internet. Với việc ứng dụng giao thức TCP/IP làm cho hệthống mạng ngày càng rộng hơn và phát triển vượt bật. Vấn đề đề an ninh,bảo mật,…là một thế mạnh của giao thức này đem lại cho công nghệ truyềnthông.Bên cạnh việc phát triển của thư điện tử bằng nhiều dịch vụ khácnhau(gmail, yahoo,MSM trong mạng điện thoại di động…), việc CHAT trựctuyến và gửi flie trực tiếp trên Internet cũng là nhu cầu không thể thiếu.Với thực tế như vậy, nhóm chúng em đã nghiên cứu và xây dựng môhình CHAT và truyền file trong mạng LAN.2. Phương pháp triển khai đề tàiNgôn ngữ lập trình :JavaChương trình soạn thảo và build :NetBeans IDESử dụngGiao thức TCP/IPSử dụng Socket trong Java3. Kết cấu của đồ ánGồm ba chương:Chương 1: Cơ sở lý thuyếtChương 2: Thiết kế và xây dựng hệ thốngChương 3: Triển khai và đánh giá kết quảSinh Viên: Trần Anh Tuấn – Lớp 06t3 4Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênChương 1.1. CƠ SỞ LÝ THUYẾT1.1.1. Giao thức TCP/IPTCP/IP là tên chung cho một tập hợp hơn 100 giao thức được sử dụngđể kết nối các máy tính vào mạng, trong đó hai giao thức chính là TCP(Transmission Control Protocol) và IP (Internet Protocol).Trong phạm vi Internet, thông tin không được truyền tải như một dòngriêng biệt từ máy tính này tới máy tính khác. Thay vào đó, dữ liệu được chiathành những gói nhỏ gọi là packet.Các packet này được gửi trên mạng máy tính. Công việc của IP làchuyển chúng đến các máy tính ở xa. Tại trạm cuối, TCP nhận các packet vàkiểm tra lỗi. Nếu một lỗi xuất hiện, TCP yêu cầu gói riêng biệt đó phải đượcgửi lại. Chỉ khi tất cả các packet đã nhận được là đúng, TCP sẽ sử dụng sốthứ tự để tạo lại thông tin ban đầu.Hình 1: Sơ đồ TCP/IP1.1.1.1. Giao thức IP(Internet Protocol – Giao thức Liên mạng)Là một giao thức hướng dữ liệu được sử dụng bởi các máy chủ nguồn vàđích để truyền dữ liệu trong một liên mạng chuyển mạch gói.Dữ liệu trong một liên mạng IP được gửi theo các khối được gọi là cácgói (packet hoặc datagram). Cụ thể, IP không cần thiết lập các đường truyềntrước khi một máy chủ gửi các gói tin cho một máy khác mà trước đó nóchưa từng liên lạc với.Giao thức IP cung cấp một dịch vụ gửi dữ liệu không đảm bảo (còn gọilà cố gắng cao nhất), nghĩa là nó hầu như không đảm bảo gì về gói dữ liệu.Gói dữ liệu có thể đến nơi mà không còn nguyên vẹn, nó có thể đến khôngtheo thứ tự (so với các gói khác được gửi giữa hai máy nguồn và đích đó), nócó thể bị trùng lặp hoặc bị mất hoàn toàn. Nếu một phần mềm ứng dụng cầnSinh Viên: Trần Anh Tuấn – Lớp 06t3 5Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênđược bảo đảm, nó có thể được cung cấp từ nơi khác, thường từ các giao thứcgiao vận nằm phía trên IP.Các thiết bị định tuyến liên mạng chuyển tiếp các gói tin IP qua cácmạng tầng liên kết dữ liệu được kết nối với nhau. Việc không có đảm bảo vềgửi dữ liệu có nghĩa rằng các chuyển mạch gói có thiết kế đơn giản hơn.(Lưu ý rằng nếu mạng bỏ gói tin, làm đổi thứ tự hoặc làm hỏng nhiều gói tin,người dùng sẽ thấy hoạt động mạng trở nên kém đi. Hầu hết các thành phầncủa mạng đều cố gắng tránh để xảy ra tình trạng đó. Đó là lý do giao thứcnày còn được gọi là cố gắng cao nhất. Tuy nhiên, khi lỗi xảy ra khôngthường xuyên sẽ không có hiệu quả đủ xấu đến mức người dùng nhận thấyđược.)Giao thức IP rất thông dụng trong mạng Internet công cộng ngày nay.Giao thức tầng mạng thông dụng nhất ngày nay là IPv4; đây là giao thức IPphiên bản 4. IPv6 được đề nghị sẽ kế tiếp IPv4: Internet đang hết dần địa chỉIPv4, do IPv4 sử dụng 32 bit để đánh địa chỉ (tạo được khoảng 4 tỷ địa chỉ);IPv6 dùng địa chỉ 128 bit, cung cấp tối đa khoảng 3.4×1038 địa chỉ . Cácphiên bản từ 0 đến 3 hoặc bị hạn chế, hoặc không được sử dụng. Phiên bản 5được dùng làm giao thức dòng (stream) thử nghiệm. Còn có các phiên bảnkhác, nhưng chúng thường dành là các giao thức thử nghiệm và không đượcsử dụng rộng rãi.Địa chỉ IP được chia thành 4 số giới hạn từ 0 – 255. Mỗi số được lưu bởi1 byte – > IP có kích thước là 4byte, được chia thành các lớp địa chỉ. Có 3 lớplà A, B, và C. Nếu ở lớp A, ta sẽ có thể có 16 triệu điạ chỉ, ở lớp B có 65536địa chỉ. Ví dụ: Ở lớp B chúng ta có tất cả các địa chỉ từ 132.25.0.0 đến132.25.255.255. Phần lớn các địa chỉ ở lớp A là sở hữu của các công ty haycủa tổ chức. Một ISP thường sở hữu một vài địa chỉ lớp B hoặc C. Ví dụ: Nếuđịa chỉ IP của bạn là 132.25.23.24 thì bạn có thể xác định ISP của bạn là ai.(có IP là 132.25.x.)Sinh Viên: Trần Anh Tuấn – Lớp 06t3 6Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 2 : Cấu trúc Header của IP1.1.1.2. Giao thức TCP(Transmission Control Protocol – “Giao thức điều khiển truyền vận”)Là một trong các giao thức cốt lõi của bộ giao thức TCP/IP. Sử dụngTCP, các ứng dụng trên các máy chủ được nối mạng có thể tạo các “kết nối”với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin. Giao thứcnày đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúngthứ tự. TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịchvụ Web và dịch vụ thư điện tử) đồng thời chạy trên cùng một máy chủ.TCP hỗ trợ nhiều giao thức ứng dụng phổ biến nhất trên Internet và cácứng dụng kết quả, trong đó có WWW, thư điện tử và Secure Shell.Trong bộ giao thức TCP/IP, TCP là tầng trung gian giữa giao thức IPbên dưới và một ứng dụng bên trên. Các ứng dụng thường cần các kết nốiđáng tin cậy kiểu đường ống để liên lạc với nhau, trong khi đó, giao thức IPkhông cung cấp những dòng kiểu đó, mà chỉ cung cấp dịch vụ chuyển gói tinkhông đáng tin cậy. TCP làm nhiệm vụ của tầng giao vận trong mô hình OSIđơn giản của các mạng máy tính.Các ứng dụng gửi các dòng gồm các byte 8-bit tới TCP để chuyển quamạng. TCP phân chia dòng byte này thành các đoạn (segment) có kích thướcthích hợp (thường được quyết định dựa theo kích thước của đơn vị truyềndẫn tối đa (MTU) của tầng liên kết dữ liệu của mạng mà máy tính đang nằmtrong đó). Sau đó, TCP chuyển các gói tin thu được tới giao thức IP để gửi nóqua một liên mạng tới mô đun TCP tại máy tính đích. TCP kiểm tra để đảmbảo không có gói tin nào bị thất lạc bằng cách gán cho mỗi gói tin một “sốthứ tự” (sequence number). Số thứ tự này còn được sử dụng để đảm bảo dữliệu được trao cho ứng dụng đích theo đúng thứ tự. Mô đun TCP tại đầu kiagửi lại “tin báo nhận” (acknowledgement) cho các gói tin đã nhận được thànhcông; một “đồng hồ” (timer) tại nơi gửi sẽ báo time-out nếu không nhận đượctin báo nhận trong khoảng thời gian bằng một round-trip time (RTT), và dữSinh Viên: Trần Anh Tuấn – Lớp 06t3 7Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênliệu (được coi là bị thất lạc) sẽ được gửi lại. TCP sử dụng checksum (giá trịkiểm tra) để xem có byte nào bị hỏng trong quá trình truyền hay không; giátrị này được tính toán cho mỗi khối dữ liệu tại nơi gửi trước khi nó được gửi,và được kiểm tra tại nơi nhận.Hình 3 : Cấu trúc header cua TCP1.1.2. Mô hình Client/ServerMô hình được phổ biến nhất và được chấp nhận rộng rãi trong cáchệ thống phân tán là mô hình client/server. Trong mô hình này sẽ có một tậpcác tiến trình mà mỗi tiến trình đóng vai trò như là một trình quản lý tàinguyên cho một tập hợp các tài nguyên cho trước và một tập hợp các tiếntrình client trong đó mỗi tiến trình thực hiện một tác vụ nào đó cần truy xuấttới tài nguyên phần cứng hoặc phần mềm dùng chung. Bản thân các trìnhquản lý tài nguyên cần phải truy xuất tới các tài nguyên dùng chung đượcquản lý bởi một tiến trình khác, vì vậy một số tiến trình vừa là tiến trìnhclient vừa là tiến trình server. Các tiến trình phát ra các yêu cầu tới cácserver bất kỳ khi nào chúng cần truy xuất tới một trong các tài nguyên củacác server. Nếu yêu cầu là đúng đắn thì server sẽ thực hiện hành động đượcyêu cầu và gửi một đáp ứng trả lời tới tiến trình client.Mô hình client/server cung cấp một cách tiếp cận tổng quát để chiasẻ tài nguyên trong các hệ thống phân tán. Mô hình này có thể được cài đặtbằng rất nhiều môi trường phần cứng và phần mềm khác nhau. Các máy tínhđược sử dụng để chạy các tiến trình client/server có nhiều kiểu khác nhau vàkhông cần thiết phải phân biệt giữa chúng; cả tiến trình client và tiến trìnhserver đều có thể chạy trên cùng một máy tính. Một tiến trình server có thểsử dụng dịch vụ của một server khác.Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ. Quátrình trao đổi dữ liệu bao gồm:1. Truyền một yêu cầu từ tiến trình client tới tiến trình server2. Yêu cầu được server xử lý3. Truyền đáp ứng cho clientSinh Viên: Trần Anh Tuấn – Lớp 06t3 8Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênMô hình truyền tin này liên quan đến việc truyền hai thông điệp vàmột dạng đồng bộ hóa cụ thể giữa client và server. Tiến trình server phảinhận thức được thông điệp được yêu cầu ở bước một ngay khi nó đến vàhành động phát ra yêu cầu trong client phải được tạm dừng (bị phong tỏa) vàbuộc tiến trình client ở trạng thái chờ cho tớ khi nó nhận được đáp ứng doserver gửi về ở bước ba.Mô hình client/server thường được cài đặt dựa trên các thao tác cơbản là gửi (send) và nhận (receive)Hình 4 : Mô hình client/serverQuá trình giao tiếp client và server có thể diễn ra theo một trong hai chếđộ: bị phong tỏa (blocked) và không bị phong tỏa (non-blocked).Chế độ bị phong tỏa (blocked):Trong chế độ bị phong tỏa, khi tiến trình client hoặc server phát ra lệnhgửi dữ liệu (send), việc thực thi của tiến trình sẽ bị tạm ngừng cho tới khi tiếntrình nhận phát ra lệnh nhận dữ liệu (receive).Tương tự đối với tiến trình nhận dữ liệu, nếu tiến trình nào đó (clienthoặc server) phát ra lệnh nhận dữ liệu, mà tại thời điểm đó chưa có dữ liệugửi tới thì việc thực thi của tiến trình cũng sẽ bị tạm ngừng cho tới khi có dữliệu gửi tới.Chế độ không bị phong tỏa (non-blocked)Sinh Viên: Trần Anh Tuấn – Lớp 06t3 9Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênTrong chế độ này, khi tiến trình client hay server phát ra lệnh gửi dữliệu thực sự, việc thực thi của tiến trình vẫn được tiến hành mà không quantâm đến việc có tiến trình nào phát ra lệnh nhận dữ liệu đó hay không.Tương tự cho trường hợp nhận dữ liệu, khi tiến trình phát ra lệnh nhậndữ liệu, nó sẽ nhận dữ liệu hiện có, việc thực thi của tiến trình vẫn được tiếnhành mà không quan tâm đến việc có tiến trình nào phát ra lệnh gửi dữ liệutiếp theo hay không.1.1.3. Cơ chế Socket trong Java1.1.3.1. Khái quát về SocketNhư chúng ta đã biết kết nối URLs và URL cung cấp cho chúng ta mộtcơ cấu để truy xuất vào các tài nguyên trên Internet ở một mức tương đốicao, nhưng đôi khi chương trình của chúng ta lại yêu cầu một giao tiếp ở tầngmạng mức thấp.Ví dụ khi chúng ta viết một ứng dụng client-server.Trong một ứng dụng client-server thì phía server sẽ cung cấp một sốdịch vụ, như: xử lí cơ sở dữ liệu, các yêu cầu bên phía client đưa ra, sau đó sẽgửi lại cho phía client. Sự giao tiếp như vậy gọi là tin cậy bởi vì dữ liệu sẽkhông bị mất mát, sai lệch trong quá trình truyền, server gửi cho client thôngđiệp gì thì phía client sẽ nhận được thông điệp nguyên như vậy. Giao thứcTCP sẽ cung cấp cho chúng ta một cách thức truyền tin cậy. Để có thể nóichuyện được trên TCP thì chương trình client và chương trình server phảithiếp lập một đường truyền, và mỗi chương trình sẽ phải kết nối lại vớisocket là điểm cuối để kết nối, client và server muốn nói chuyện với nhau thìsẽ phải thông qua socket, mọi thông điệp sẽ phải đi qua socket. Chúng ta cứmường tượng socket ở đây là một cái cửa mọi người muốn đi ra hay đi vàođều phải thông qua cái cửa này.1.1.3.2. Cơ chế SocketMột socket là một điểm cuối của thông tin hai chiều liên kết giữa haichương trình đang chạy trên mạng. Những lớp socket được dùng để đại diệncho kết nối giữa một chương trình client và một chương trình server. TrongJava gói Java.net cung cấp hai lớp Socket và ServerSocket để thực hiện kếtnối giữa client và server.Thông thường thì server sẽ chạy trên một máy đặc biệt và có một socketgiới hạn trong 1 Portnumber đặc biệt.Phía client: client được biết hostname của máy mà server đang chạy vàport number mà server đang lắng nghe. Để tạo một yêu cầu kết nối client sẽthử hẹn gặp server ở trên máy của server thông qua port number. Clientcũng cần xác định chính nó với server thông qua local port number.Sinh Viên: Trần Anh Tuấn – Lớp 06t310Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 5 : Client gửi yêu cầu kết nối tới ServerNếu mọi thứ tốt đẹp thì server sẽ đồng ý kết nối. khi đồng ý kết nối thìserver sẽ tạo ra một socket mới để nói chuyện với client và cũng tạo ra mộtsocket khác để tiếp tục lắng nghe.Hình 6 : Server đồng ý kết nối và tiếp tục lắng nghe.1.1.3.3. Mô hình truyền tin socketSinh Viên: Trần Anh Tuấn – Lớp 06t311Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 7 : Mô hình truyền tin socketSinh Viên: Trần Anh Tuấn – Lớp 06t312Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 8 : Mô hình tương tác giữa client/server qua socket TCPMột socket có thể thực hiện bảy thao tác cơ bản:Kết nối với một máy ở xa (ví dụ, chuẩn bị để gửi và nhận dữ liệu)Gửi dữ liệuNhận dữ liệuNgắt liên kêtGán cổngNghe dữ liệu đếnChấp nhận liên kết từ các máy ở xa trên cổng đã được gánLớp Socket của Java được sử dụng bởi cả client và server, có cácphương thức tương ứng với bốn thao tác đầu tiên. Ba thao tác cuối chỉ cầncho server để chờ các client liên kết với chúng. Các thao tác này được cài đặtbởi lớp ServerSocket. Các socket cho client thường được sử dụng theo môhình sau:Một socket mới được tạo ra bằng cách sử dụng hàm Socket().Socket cố gắng liên kết với một host ở xa.Sinh Viên: Trần Anh Tuấn – Lớp 06t313Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênMỗi khi liên kết được thiết lập, các host ở xa nhận các luồng vào vàluồng ra từ socket, và sử dụng các luồng này để gửi dữ liệu cho nhau. Kiểuliên kết này được gọi là song công (full-duplex)-các host có thể nhận và gửidữ liệu đồng thời. Ý nghĩa của dữ liệu phụ thuộc vào giao thức.Khi việc truyền dữ liệu hoàn thành, một hoặc cả hai phía ngắt liên kết.Một số giao thức, như HTTP, đòi hỏi mỗi liên kết phải bị đóng sau mỗi khiyêu cầu được phục vụ. Các giao thức khác, chẳng hạn FTP, cho phép nhiềuyêu cầu được xử lý trong một liên kết đơn.1.1.3.4. Một số hàm cơ bản trong socketClass mô tả về socket- Tạo một socketSocket(InetAddress address, int port)Socket(String host, int port)Socket(InetAddress address, int port, InetAddress, localAddr, intlocalPort)Socket(String host, int port, InetAddress, localAddr, int localPort)Socket()- Lấy thông tin về một socketInetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đếnint getPort() : trả về địa chỉ mà socket kết nối đến.InetAddress getLocalAddress() : trả về địa chỉ cục bộ.int getLocalPort() : trả về địa chỉ cục bộ.- Sử dụng Streamspublic OutputStream getOutputStream() throws IOException: Trả vềmột output stream cho việc viết các byte đến socket này.public InputStream getInputStream() throws IOException : Trả vềmột input stream cho việc đọc các byte từ socket này.ServerSocket class- Class mô tả ServerSocketTạo một ServerSocketServerSocket(intport) throws IOException ServerSocket(intport,intbacklog) throws IOException ServerSocket(intport, intbacklog,InetAddressbindAddr) throws IOException- Các phương thức trong ServerSocketSocket accept() throws IOException: lắng nghe một kết nối đến socketnày và có chấp nhận nó hay khôngvoid close() throws IOException: Ðóngsocket.InetAddress getInetAddress() : trả về địa chỉ cục bộ của socketint getLocalPort() : trả về port mà server đang lắng ngheSinh Viên: Trần Anh Tuấn – Lớp 06t314Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 9 : Ví dụ về một chương trình socket TCPSinh Viên: Trần Anh Tuấn – Lớp 06t315Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 10 : Ví dụ về một chương trình socket TCPSinh Viên: Trần Anh Tuấn – Lớp 06t316Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênChương 1.2. THIẾT KẾ VÀ XÂY DỰNG HỆTHỐNG1.2.1. Phân tích yêu cầu- Yêu cầu của bài toán: Xây dựng mô hình Client – Server ứng dụngCHAT- Xây dựng chương trình ServerTạo một TCP Socket và gắn vào một cổngXây dựng một chương trình Server đa tuyến (Threaded Server) để chophép nhiều Client kết nối tới Server.Mỗi tuyến đảm nhận liên lạc với Client.Chờ và lắng nghe yêu cầu kết nối từ ClientChấp nhận kết nối và nhận Socket tương ứng.Truyền nhận thông tin qua các luồng nhận/gửi dữ liệu của socket.Khi một user login vào Server thì Server sẻ cập nhật user đó và gửi tớicác Client đang kết nốiKhi một user logout ra khỏi Server thì Server hiện thông báo user đó đãlogout và gửi tới Client.Đóng kết nối.- Xây dựng chương trình Client.Tạo một TCP Socket với địa chỉ IP và số cổng mà chương trình Serverđang chạyThiết lập kết nối tới ServerTrao đổi dữ liệu với Server.Cập nhật các user khác vừa logint/logout.Gửi/ nhận thông điệp tới tất cả mọi người có trong phòng chátĐóng kết nốiThiết kế giao diện hiển thị khung chat phía Client.- Sử dụng giao thức TCP/IP- Yêu cầu giao diện:Vùng thao tác chuỗi(CHAT):CHAT trực tiếp giữa Client và Server khi được kết nối.Trao đổi dữ liệu với nhau nhờ vào Stream nhập và Stream xuất.1.2.2. Phân tích các chức năngChức năng của chương trình được thể hiện qua chương trình Client vàServer.Chức năng Chat trong mạng LAN:Chuỗi ký tự nhập từ bàn phím.Ấn nút “Send” để gửi chuỗi ký tự vừa nhập để giao tiếp với nhau giữaClient và Server.Sinh Viên: Trần Anh Tuấn – Lớp 06t317Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênXây dựng chương trình Client: nối kết đến Server trong mạng để traođổi thông tin và truyền tải dữ liệu.Xây dựng chương trình Server đa tuyến để kết nối với nhiều Client:Xử lý các yêu cầu nối kết: lắng nghe yêu cầu nối kết của Client.Xử lý các thông điệp yêu cầu từ Client: chấp nhận hoặc từ chối nối kêt.1.2.3. Thiết kế kế chương trình1.2.3.1. Thiết kế giao diệnHình 11: Giao diện loginHình 12: Giao diện Chat roomServer ip/host name: địa chỉ ip hay hostname của Server (mặc định làđịa chỉ localhost).Port : số hiệu cổng kết nốiChat ID: nickname dùng để đăng nhậpSinh Viên: Trần Anh Tuấn – Lớp 06t318Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênSend All : thông tin Chat sẽ được gửi tới tất cả các user trong phòngChatSend PM: thông tin Chat sẽ được gửi tới user được chỉ định trongphòng ChatFile/Exit : thoát khỏi phòng Chat1.2.3.2. Xây dựng các chức năngXây dựng chương trình Client(sử dụng lớp java.net.Socket):Mở một socket nối kết đến Server đã biết địa chỉ IP/localhost và số hiệucổng(9999).Lấy Stream nhập và Stream xuất được gán với socket.Trao đổi dữ liệu với Server nhờ vào các Stream nhập và Stream xuất.Dùng giao thức TCP/IP để kiểm tra dữ liệu trao đổi với Server.Xây dựng chương trình Server đa tuyến(Server phải luôn giữ kết nối)Xử lý các yêu cầu nối kết:Lắng nghe yêu cầu nối kết.Chấp nhận một yêu cầu nối kết.Tạo kênh giao tiếp ảo với các Client.Xử lý các thông điệp yêu cầu từ Client.Xử lý các thông điệp yêu cầu từ Client:Chờ nhận thông điệp của các Client.Phân tích và xử lý yêu cầu.Gửi thông điệp trả lời cho Client.Sinh Viên: Trần Anh Tuấn – Lớp 06t319Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênChương 1.3. TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ1.3.1. Môi trường triển khaiHệ điều hành Microsoft Windowns 7 profesional, Microsoft Windowns.XP.Eclipse , NetbeansJDK 1.5Mạng LAN1.3.2. Kết quả các chức năng của chương trìnhHình 13 : Kết nối lỗi khi Server chưa chạyHình 14 : Chạy chương trình serverSinh Viên: Trần Anh Tuấn – Lớp 06t320Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 15 : Login thành công vào phòng ChatSinh Viên: Trần Anh Tuấn – Lớp 06t321Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênHình 16 : Thử nghiệm Chat privateHình 17 : Hiển thị thông báo login và logout trên ServerSinh Viên: Trần Anh Tuấn – Lớp 06t322Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênKẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN1. Những kết quả đạt được- Mô phỏng được mô hình Client-Server trong mạng LAN.- Thực hiện được yêu cầu bài đề ra(CHAT ROOM).- Dùng giao thức TCP/IP trong truyền dữ liệu.- Thực hiện được việc kiểm tra trong nối kêt giữa Client-Server.2. Những vấn đề tồn tại- Chương trình Chat còn đơn giản- Giao diện sơ sài- Chỉ thực hiện được nối kết giữa Client-Server(theo mô hình).3. Hướng phát triển- Hoàn thiện giao diện đẹp và phù hợp với người dùng.- Mở rộng ứng dụng trong chương trình Chat như :+ Xử lý truyền file thông qua chương trình Chat+ Xây dựng hệ cơ sở dữ liệu quản lý thông tin đăng nhập( username, password …)- Phát triển trên mạng rộng ngoài LAN.Sinh Viên: Trần Anh Tuấn – Lớp 06t323Đồ Án Lập Trình Mạng GVHD : Trần Hồ ThủyTiênPHỤ LỤC1. Chương trình Server:1.1. Chatserver class:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package server;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.*;import java.util.logging.Level;import java.util.logging.Logger;/*** @author anhtuan*/public class chatserver implements Runnable{serverSocket sThread[] = new serverSocket[50];int maxClient = 0;public synchronized void send(String username,String message){if ( username.equals(“send_to_all”)) {for(int i=0; i