Việc liên kếtcác máy tính trên môi trường mạng cũng như liên kết các mạng lại với nhau đem lại chochúng ta nhiều lợi ích trong công việc cũng như trong việc học tập nghiên cứu, giải trí.
Trang 1MỤC LỤC
LỜI NÓI ĐẦU 3
Chương 1 GIỚI THIỆU 5
1.1 MỤC TIÊU CỦA ĐỀ TÀI 5
1.2 GIẢI QUYẾT ĐỀ TÀI 5
Chương 2 : CƠ SỞ LÝ THUYẾT 8
2.1 SƠ LƯỢC VỀ MẠNG MÁY TÍNH VÀ HỆ PHÂN TÁN 8
2.1.1 Sơ lược về mạng máy tính 8
2.1.2 Sơ lược về hệ phân tán 10
2.2 CÁC GIAO THỨC MẠNG 12
2.2.1 Giao thức IP 12
2.2.2 Giao thức UDP 13
2.2.3 Giao thức TCP 14
2.3 MÔ HÌNH CLIENT-SERVER 15
2.4 LẬP TRÌNH SOCKET 18
Chương 3: MÔ TẢ ỨNG DỤNG 29
3.1 GIỚI THIỆU ỨNG DỤNG 29
3.2 KIẾN TRÚC ỨNG DỤNG 29
3.2.1 Mô hình tổng thể 29
3.2.2 Gói server 30
3.2.3 Gói client 30
3.3 MÔ HÌNH THÔNG ĐIỆP GIỮA CLIENT VÀ SERVER 30
Chương 4 CÀI ĐẶT VÀ KẾT QUẢ THỬ NGHIỆM 34
4.1 CÀI ĐẶT 34
4.1.1 Quá trình lựa chọn ngôn ngữ 34
4.1.2 Mô tả chi tiết các lớp, phương thức của ứng dụng 34
4.2 KẾT QUẢ THỬ NGHIỆM 37
4.3 CÁC GIAO DIỆN CHÍNH CỦA CHƯƠNG TRÌNH 37
4.4 KẾT QUẢ THỬ NGHIỆM TRÊN MẠNG LAN 42
Chương 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 43
Trang 25.1 KẾT LUẬN VÀ KẾT QUẢ ĐẠT ĐƯỢC 43
5.1.1 Kết luận 43
5.1.2 Kết quả đạt được 43
5.2 ƯU KHUYẾT ĐIỂM 44
5.2.1 Ưu điểm 44
5.2.2 Khuyết điểm 44
5.3 HƯỚNG PHÁT TRIỂN 44
Trang 3LỜI NÓI ĐẦU
Trong những năm gần đây, mạng máy tính ngày càng trở nên phổ biến Việc liên kếtcác máy tính trên môi trường mạng cũng như liên kết các mạng lại với nhau đem lại chochúng ta nhiều lợi ích trong công việc cũng như trong việc học tập nghiên cứu, giải trí.Chúng ta có thể sử dụng các tài nguyên sẵn có được chia sẻ như file server, printer, máy fax, môi trường mạng còn là một môi trường thông tin nhanh chóng và tiện lợi nhờ vào các cơchế truyền thông trên mạng như : e-mail, www
Bên cạnh đó, tốc độ phát triển của máy tính PC cũng rất nhanh chóng Các kỹ thuậthiện đại đã giúp tạo ra các máy PC với tốc độ tính toán nhanh hơn, bộ nhớ lớn hơn và khảnăng xử lý của nó cũng ngày càng đa dạng hơn trong khi giá thành ngày càng rẻ hơn Mộttrong những khả năng ưu việt của máy PC hiện nay là hỗ trợ multimedia Các máy PC ngàynay giao tiếp với con người không chỉ bằng text mà còn kết hợp tất cả các phương tiện khácnhư tiếng nói, hình ảnh
Việc đưa kỹ thuật multimedia vào các ứng dụng truyền thông trên mạng giúp chúng
ta tạo ra nhiều ứng dụng phong phú hơn Chẳng hạn hộp thư điện tử ngày nay có thể khôngchỉ là văn bản mà còn bao gồm tiếng nói, hình ảnh Các trang web trở nên sinh động hơnhẳn khi kèm theo kỹ thuật multimedia Bên cạnh đó, chúng ta có thể thiết kế các ứng dụngtiện ích như Video conference, voice mail
Thông qua chương trình này, người sử dụng có thể trao đổi thông tin với nhau bằngtiếng nói Chương trình này đã được hiện thực rất nhiều trong các lĩnh vực thông tin nhưđiện thoại, viễn thông, máy tính Tuy nhiên nó chưa được áp dụng và phát triển rộng rãinhư trên các lĩnh vực thông tin khác do sự hạn chế của thiết bị Ngày nay, khi công nghệthông tin đã phát triển thì việc hiện thực chương trình này là hoàn toàn có thể Ứng dụngtrong nhiều lĩnh vực khác nhau như :
Việc dạy học từ xa
Việc chẩn đoán, chữa bệnh từ xa
Hội thảo, thảo luận theo nhóm
Công cụ trao đổi thông tin bằng hình ảnh và âm thanh
Trang 4Mục tiêu của đồ án môn học là tìm hiểu các mô hình và công nghệ truyền âm thanhtrên mạng máy tính, trên cơ sở đó xây dựng ứng dụng truyền thông âm thanh thoại trênmạng cục bộ Đồ án sẽ xây dựng thử nghiệm một hệ thống cho phép trao đổi thông tin bằngtiếng nói thoại.
Việc nghiên cứu lý thuyết một cách hệ thống và xây dựng chương trình phần mềmđòi hỏi phải đầu tư nhiều thời gian Với thời gian có hạn cho nên bài báo cáo này của nhómchúng em không tránh khỏi những thiếu sót, chúng em rất mong được sự chỉ dẫn thêm củathầy và các bạn
Nhân đây, chúng em xin chân thành cám ơn đến thầy Nguyễn Bảo Ân, người trựctiếp hướng dẫn chúng em hoàn thành đồ án này Nhóm xin chân thành cám ơn các thầy côtrong khoa Kỹ thuật Công nghệ, bộ môn Công nghệ Thông tin Trường ĐH Trà Vinh, vàtoàn thể các bạn đã giúp đỡ chúng em hoàn thành đồ án này
Trang 5Chương 1 GIỚI THIỆU
Vận dụng tổng hợp những kiến thức đã học để tiến hành xây dựng chương trình VoiceChat
Dùng Java để xây dựng 1 trương trình Chat qua mạng theo mô hình Client/Server.Tạo ra được 1 chương trình mà các Client kết nối được với nhau thông qua Server.Các Client có thể gửi tin nhắn, hoặc trò chuyện trực tiếp với các Client khác
TCP/IP cho phép các máy tính trong mạng TCP/IP có thể tạo ra các kết nối để trao đổi thông tin với nhau.Với 1 địa chỉ IP + 1 cổng TCP sẽ tạo thành một cầu nối và Socket chính là một giao diện lập trình trên các cầu nối đó (1 IP Address + 1 Port TCP = 1 Socket )
Khi các máy tính muốn trao đổi thông tin với nhau thì các máy phải có cùng một Socket Một máy được coi là Server, nó mở ra một Socket và lắng nghe yêu cầu Các máy còn lại được coi là Client, nó gọi cho Server Socket để bắt thiết lập một kết nối Để thiết lập được kết nối cần có địa chỉ của máy đích (Destination IP Address ) và một cổng TCP (TCP port)
Mô hình Client – ServerPhương thức truyền tin trong Java:
Trang 6Nó sử dụng phương thức truyền tin có kết nối thông qua 2 đối tượng là:
Socket(Client) và ServerSocket(Server) Tạo 1 Socket sử dụng để kết nối tới 1
SocketServer
Client Socket được tạo ra thông qua 1 hàm khởi tạo(Contructor) của lớp Socket:
Socket client=new Socket(Destination Address,Port)
Trong đó:
+ Destination Address là địa chỉ của máy muốn kết nối tới
+ Port là số hiệu cổng TCP đòi hỏi phải có một ServerSocket đang lắng nghe yêu cầu trên đó
Để tạo ra một ServerSocket sử dụng câu lệnh sau:
ServerSocket SSocket=new ServerSocket(Port,Number of Connection)
Trong đó:
+ Port là số hiệu cổng sẽ chờ để phục vụ+ Number of Connection là số kết nối chấp nhận phục vụ cùng một lúc
Một SocketServer sẽ lắng nghe trên một cổng Khi nhận được một yêu cầu từ socket (Client Socket) nó sẽ kiểm tra xem còn chấp nhận được kết nối đó không, chưa vượt quá số kết nối mà nó có thể phục vụ, nếu được nó sẽ tạo ra một Socket để tạo liên kết với Client yêu cầu bằng phương thức:
Trang 8Chương 2 : CƠ SỞ LÝ THUYẾT
2.1.1 Sơ lược về mạng máy tính.
Mạng máy tính là gì?
Mạng máy tính là một tập hợp các máy tính được kết nối với nhau bởi đường truyềnvật lý theo một cấu trúc nào đó để đáp ứng một số yêu cầu của người dùng
Vai trò của mạng máy tính
Ngày nay với một lượng lớn về thông tin, nhu cầu xử lý thông tin ngày càng cao.Mạng máy tính hiện nay trở nên quá quen thuộc đối với chúng ta, trong mọi lĩnh vực nhưkhoa học, quân sự, quốc phòng, thương mại, dịch vụ, giáo dục Hiện nay ở nhiều nơi mạng
đã trở thành một nhu cầu không thể thiếu được Người ta thấy được việc kết nối các máytính thành mạng cho chúng ta những khả năng mới to lớn như:
Sử dụng chung tài nguyên: những tài nguyên của mạng (như thiết bị, chương trình,
dữ liệu) khi được trở thành các tài nguyên chung thì mọi thành viên của mạng đều có thểtiếp cận được mà không quan tâm tới những tài nguyên đó ở đâu
Tăng độ tin cậy của hệ thống: người ta có thể dễ dàng bảo trì máy móc và lưu trữ
(backup) các dữ liệu chung và khi có trục trặc trong hệ thống thì chúng có thể được khôiphục nhanh chóng Trong trường hợp có trục trặc trên một trạm làm việc thì người ta cũng
có thể sử dụng những trạm khác thay thế
Nâng cao chất lượng và hiệu quả khai thác thông tin: khi thông tin có thể được sử
dụng chung thì nó mang lại cho người sử dụng khả năng tổ chức lại các công việc vớinhững thay đổi về chất như:
Ðáp ứng những nhu cầu của hệ thống ứng dụng kinh doanh hiện đại
Cung cấp sự thống nhất giữa các dữ liệu
Tăng cường năng lực xử lý nhờ kết hợp các bộ phận phân tán
Tăng cường truy nhập tới các dịch vụ mạng khác nhau đang được cung cấp trên thếgiới
Trang 9Phân loại mạng máy tính
Dựa trên khoảng cách địa lý:
Mạng cục bộ (Local Area Network - LAN): có phạm vi hẹp, bán kính khoảng vài chục
km
Mạng đô thị (Metropolitan Area Network - MAN): phạm vi rộng hơn, với bán kính
nhỏ hơn 100km
Mạng diện rộng (Wide Area Network - WAN): phạm vi mạng có thể vượt biên giới
quốc gia, lục địa
Mạng toàn cầu(Global Area Network - GAN): phạm vi trải rộng trên toàn thế giới
100 m Trong một tòa nhà
1 km Trong một khu vực
1000 km Trong một châu lục
Dựa trên kiến trúc mạng
Mạng kiểu Bus (Bus Topology)
Các máy tính đều được nối vào một đường dây truyền
chính (bus) Đường truyền chính này được giới hạn hai đầu bởi
một loại đầu nối đặc biệt gọi là terminator
Mạng hình Sao (Star Topology)
Đây là mô hình mạng thông dụng nhất Là dạng đơn giản
nhất Mạng này bao gồm một thiết bị trung tâm là switch hay hub,
Trang 10hoạt động giống như một tổng đài cho phép thực hiện việc nhận và truyền dữ liệu từ trạmnày tới các trạm khác
Mạng Vòng tròn (Ring Topology)
Là mô hình mạng mà một node được kết nối chính xác với 2 node khác tạo thànhmột vòng tròn tín hiệu: một vòng tròn (ring)
Mỗi gói dữ liệu đều có mang địa chỉ trạm đích, mỗi trạm khi
nhận được một gói dữ liệu nó kiểm tra nếu đúng với địa chỉ của
mình thì nó nhận lấy còn nếu không phải thì nó sẽ phát lại cho trạm
kế tiếp, cứ như vậy gói dữ liệu đi được đến đích
2.1.2 Sơ lược về hệ phân tán.
Hệ phân tán là gì?
Có nhiều định nghĩa cho một hệ phân tán Tuy nhiên, ta có thể định nghĩa hệ phântán là một tập hợp bao gồm các máy tính tự trị được liên kết với nhau qua một mạng máytính, và được cài đặt phần mềm hệ phân tán Phần mềm hệ phân tán cho phép máy tính cóthể phối hợp các hoạt động của nó và chia sẻ tài nguyên của hệ thống như phần cứng, phầnmềm và dữ liệu
Một số tính chất quan trọng của một hệ phân tán:
Thứ nhất chúng cho phép chúng ta chạy những ứng dụng khác nhau trên nhiều máykhác nhau thành một hệ thống duy nhất Một ưu điểm khác của hệ phân tán đó là khi một hệthống được thiết kế đúng cách, một hệ phân tán có thể có khả năng thay đổi tuỳ theo quy môcủa hệ thống rất tốt Tuy nhiên, tất cả mọi thứ đều có hai mặt của nó, một hệ phân tán cũngvậy bên cạnh những mặt ưu việt thì nó cũng có những nhược điểm đó là tính bảo mật kém
Những ứng dụng của hệ phân tán:
Cung cấp những thuận lợi cho việc tính toán đa mục đích đến những nhóm ngườidùng, tự động hoá công việc ngân hàng và hệ thống truyền thông đa phương tiện, ngoài rachúng còn bao quát toàn bộ những ứng dụng thương mại và kĩ thuật Hệ phân tán đã trởthành tiêu chuẩn để tổ chức về mặt tính toán Nó có thể được sử dụng cho việc thực hiện
Trang 11tương tác hệ thống tính toán đa mục đích trong UNIX và hỗ trợ cho phạm vi rộng củathương mại và ứng dụng công nghiệp của những máy tính…
Các đặc trưng cơ bản của hệ phân tán
Kết nối người sử dụng với tài nguyên
Chia sẻ nguồn tài nguyên là một đặc tính cơ bản của hệ thống phân tán, nó là cơ sởcho những đặc tính khác và nó ảnh hưởng đến những kiến trúc phần mềm có sẵn trong các
hệ phân tán Các nguồn tài nguyên có thể là mục dữ liệu, phần cứng và các thành phần củaphần cứng Các nguồn tài nguyên được phân biệt từ một dữ liệu được quản lý với nhữngquá trình xử lý đơn bởi nhu cầu của vài quá trình xử lý để chia sẻ chúng
Tính trong suốt (transparency)
Một hệ phân tán được gọi là trong suốt nếu nó có khả năng che dấu tính rời rạc vànhững nhược điểm có thể của nó đối với người sử dụng cuối và người lập trình ứng dụng.Có
Trong suốt bản sao : che dấu các bản sao được nhân ra
Trong suốt về tương tranh
Trong suốt về lỗi
Trong suốt truy cập nhanh
Tính mở (openess)
Một hệ phân tán được gọi là có tính mở nếu nó có khả năng bổ sung thêm các dịch
vụ mới mà không làm ảnh hưởng xấu đến các dịch vụ đã có
Tính co dãn (scalability)
Trang 12Một hệ phân tán được gọi là có tính co dãn nếu nó có thể thích nghi được với những
sự thay đổi qui mô của hệ thống Tính co dãn thể hiện trên 3 khía cạnh
Dễ dàng bổ sung thêm tài nguyên và người sử dụng
Hệ thống thay đổi qui mô về mặt địa lý
Hệ thống thay đổi qui mô về quản trị
Tính chịu lỗi (Fault tolerance)
Xử lý được những lỗi xảy ra trong quá trình làm việc Bên cạnh tính chịu lỗi luôn đikèm theo là khắc phục lỗi
Tính an toàn an ninh (security)
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 (packethoặ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ửicá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ấpmộ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ồnvà đí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 đượ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
Trang 13chuyể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ếtcá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ứcnà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 dung nhận thấy được) Giao thức IP rất thôngdụng trong mạng Internetcông cộng ngày nay Giao thức tầng mạng thong dụng nhất ngàynay là IPv4; 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ưngchú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.
Kề từ khi chính thức được đưa vào sử dụng và được định nghĩa trong kiến nghịRFC791 năm 1981 đến nay, cho tới bây giờ phiên bản này vẫn đang được sử dụng rộng rãi
và cũng đã góp phần tạo ra sự phát triển bùng nổ của các mạng máy tính
2.2.2 Giao thức UDP
UDP là giao thức lớp Giao vận đơn giản nhất, được mô tả trong RFC 768 Ứng dụnggửi bản tin tới socket UDP, sau đó được đóng gói thành một UDP paragram và được truyềnxuống lớp IP để gửi tới đích Gói tin UDP được truyền mà không đảm bảo rằng nó có thể tớiđích, giữ đúng thứ tự và đến đích một lần Vấn đề của người lập trình mạng với UDP là đảmbảo tính tin cậy Nếu datagram tới đích nhưng trường kiểm tra tổng (checksum) có lỗi haygói tin bị drop ở trên mạng thì nó sẽ được truyền lại Nếu muốn xác định được rằng gói tin
đã tới đích thì cần rất nhiều tính năng trong ứng dụng: ACK từ đầu cuối khác, điều khiểnviệc truyền lại, Mỗi một UDP datagram có chiều dài và được truyền lên cùng với dữ liệucho lớp ứng dụng Điều này khác với TCP là giao thức luồng byte (byte-stream protocol).Chúng ta cũng có thể nói: UDP cung cấp dịch vụ không hướng kết nối Ví dụ, client UDP
có thể tạo một socket và gửi datagram tới server này và sau đó gửi một datagram khác cũngtới server khác Cũng giống như server UDP có thể nhận nhiều datagram trên một socketUDP từ các client khác nhau
Trang 142.2.3 Giao thức TCP
Là giao thức hướng kết nối, nó cung cấp một hoạt động truyền tin tin cậy TCP chịutrách nhiệm phân chia dữ liệu gửi thành các segment tại máy gửi và lắp gép các segment lạitại máy đích, trong quá trình truyền có thể truyền lại bất cứ segment nào nếu máy đích chưanhận được Gói tin TCP có dạng sau:
Source port: Số hiệu của cổng gọi (16 bits)
Destination Port : Số hiệu của cổng đích (16 bits)
Sequence Number: Chữa số đảm bảo tuần tự chính xác của dữ liệu đến, giống như sốthứ tự (32 bits)
Trang 15Acknowledgment Number (ACK): dùng trong các gói dữ liệu hồi đáp của máy nhậncho máy gửi, báo hiệu để máy gửi biết lượng dữ liệu mà máy nhận đã nhận được và yêu cầugửi dữ liệu tiếp theo (32 bits).
Header Length: Số lượng các từ 32 bit trong header (32 bits)
Reserved : Set thành zero (6 bits)
Code Bits: Các chức năng điều khiển như là thiết lập và kết thúc một phiên, nó giốngnhư cờ gồm 6 bits.1.Cờ URG.2.Cờ ACK dùng để xác nhận.3.Cờ PSH (push) yêu cầu xóavùng đệm.4.Cờ RST (Reset) tái thiết lập.5.Cờ SYN (Synchronic) đồng bộ.6.Cờ FIN (finish)Kết thúc, sử dụng khi muốn hủy kết nối
Window: ghi kích thước cửa sổ của máy gửi báo cho máy nhận biết có gửi tín hiệutrở lại thì không được vượt quá kích thước này(16 bits)
Checksum: tính từ header và các trường dữ liệu(16 bits)
Urgent: Chỉ ra điểm kết thúc của dữ liệu chuẩn(16 bits)
Options: Một tùy chọn định ra kích thước tối đa hiện hành của gói TCP
Data: Dữ liệu giao thức của lớp trên
Truyền một yêu cầu từ chương trình client tới chương trình server
Yêu cầu được server xử lý
Truyền đáp ứng cho client
Trang 16Mô hình truyền tin này thực hiện truyền hai thông điệp qua lại giữa client và servermột cách đồng bộ hóa Chương trình server nhận được thông điệp từ client thì nó phát rayêu cầu client chuyển sang trạng thái chờ (tạm dừng) cho tới khi client nhận được thôngđiệp đáp ứng do server gửi về Mô hình client/server thường được cài đặt dựa trên các thaotác cơ bản là gửi (send) và nhận (receive).
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ầntruy xuất tới tài nguyên phần cứng và phần mềm dùng chung Bản thân các trình quản lý tàinguyê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ìnhkhá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ìnhphá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àinguyê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êucầu và gửi một đáp ứng trả lời tới tiến trình client
Trang 17Mô hình client/server cung cấp một cách tiếp cận tổng quát để chia sẻ tài nguyêntrong 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ườngphầ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ìnhclient/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ếntrì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
Truyền đáp ứng cho client
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êucầ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ạmdừ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)
Quá trình giao tiếp client và server có thể diễn ra theo một trong hai chế độ: bị phongtỏ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/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 *** 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ếntrì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)
Trang 18Trong 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àophá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 đếnviệc có tiến trình nào phát ra lệnh gửi dữ liệu tiếp theo hay không
Socket là gì?
Sockets cung cấp một interface để lập trình mạng tại tầng Transport Một socket làmột end-point của một liên kết giữa hai ứng dụng Ngày nay, Socket được hỗ trợ trong hầuhết các hệ điều hành như MS Windows (WinSock), Linux và được sử dụng trong nhiềungôn ngữ lập trình khác nhau: như C, C++, Java, Visual Basic, C#, Windows SocketApplication Programming Interface (Winsock API) là một thư viện các hàm socket
Winsock hỗ trợ các lập trình viên xây dựng các ứng dụng mạng trên nền TCP/IP
Xây dựng ứng dụng Client-Server với Socket
Khi xây dụng một ứng dụng mạng, chúng ta thực hiện các bước sau:
1 Xác định kiến trúc mạng: Client – Server, Peer-to-Peer
2 Giao thức sử dụng tầng Transport: TCP, UDP
3 Các port sử dụng ở Server và Client
4 Giao thức tầng ứng dụng khi trao đổi dữ liệu giữa hai end-host
5 Lập trình
Phần này trình bày các bước cơ bản trong việc xây dựng các ứng dụng mạng theokiến trúc Client-Server và giao thức sử dụng ở tầng Transport là TCP bằng Socket
Trang 19Sơ đồ tương tác giữa Server - Client theo giao thức TCP
Trong giai đoạn truyền nhận dữ liệu, việc trao đổi dữ liệu giữa Client và Server phảituân thủ theo giao thức của ứng dụng
Ghi chú:
Nếu chúng ta phát triển ứng dụng theo các giao thức đã định nghĩa sẵn, chúng ta phảitham khảo và tuân thủ đúng những qui định của giao thức (tham khảo trong các tài liệu RFC(Request For Comments))
Trang 20Nếu xây dựng ứng dụng dạng Peer -to-Peer, thì một ứng dụng phải có cả chức năngclient và server trong mô hình trên.
Mô hình truyền tin socket
Khi lập trình, ta cần quan tâm đến chế độ bị phong tỏa, vì nó có thể dẫn đến tìnhhuống một tiến trình nào đó sẽ rơi vào vòng lặp vô hạn của quá trình gửi và nhận
Trong chương 1 chúng ta đã biết hai giao thức TCP và UDP là các giao thức tầnggiao vận để truyền dữ liệu Mỗi giao thức có những ưu và nhược điểm riêng Chẳng hạn,giao thức TCP có độ tin cậy truyền tin cao, nhưng tốc độ truyền tin bị hạn chế do phải cógiai đoạn thiết lập và giải phóng liên kết khi truyền tin, khi gói tin có lỗi hay bị thất lạc thìgiao thức TCP phải có trách nhiệm truyền lại,…Ngược lại, giao thức UDP có tốc độ truyềntin rất nhanh vì nó chỉ có một cơ chế truyền tin rất đơn giản: không cần phải thiết lập và giảiphóng liên kết Khi lập trình cho TCP ta sử dụng các socket luồng, còn đối với giao thứcUDP ta sẽ sử dụng lớp DatagramSocket và DatagramPacket
Truyền tin hướng liên kết nghĩa là cần có giai đoạn thiết lập liên kết và giải phóngliên kết trước khi truyền tin Dữ liệu được truyền trên mạng Internet dưới dạng các gói(packet) có kích thước hữu hạn được gọi là datagram Mỗi datagram chứa một header vàmột payload Header chứa địa chỉ và cổng cần truyền gói tin đến, cũng như địa chỉ và cổngxuất phát của gói tin, và các thông tin khác được sử dụng để đảm bảo độ tin cậy truyền tin,payload chứa dữ liệu Tuy nhiên do các datagram có chiều dài hữu hạn nên thường phảiphân chia dữ liệu thành nhiều gói và khôi phục lại dữ liệu ban đầu từ các gói ở nơi nhận.Trong quá trình truyền tin có thể có thể có một hay nhiều gói bị mất hay bị hỏng và cần phảitruyền lại các gói tin đến không theo đúng trình tự Để tránh những điều này, việc phân chia
dữ liệu thành các gói, tạo các header, phân tích header của các gói đến, quản lý danh sáchcác gói đã nhận được và các gói chưa nhận được,… rất nhiều công việc cần phải thực hiện,
và đòi hỏi rất nhiều phần mềm phức tạp
Thật may mắn, ta không cần phải tự thực hiện công việc này Socket là một cuộccách mạng của Berkeley UNIX Chúng cho phép người lập trình xem một liên kết mạngnhư là một luồng mà có thể đọc dữ liệu ra hay ghi dữ liệu vào từ luồng này
Về mặt lịch sử Socket là một sự mở rộng của một trong những ý tưởng quan trọngnhất của UNIX: tất cả các thao tác vào/ra giống như vào ra tệp tin đối với người lập trình,
Trang 21cho dù ta đang làm việc với bàn phím, màn hình đồ họa, một file thông thường, hay một liênkết mạng Các Socket che dấu người lập trình khỏi các chi tiết mức thấp của mạng như môikiểu đường truyền, các kích thước gói, yêu cầu truyền lại gói, các địa chỉ mạng…
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)
- 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ếtvới chúng Các thao tác này được cài đặt bởi lớp ServerSocket Các socket cho clientthườ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
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ệuphụ thuộc vào giao thức
Khi việc truyền dữ liệu hoàn thành, một và cả hai phía ngắt liên kết Một số giaothứ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ácgiao 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
Socket cho Client
Các constructor
public Socket(String host, int port) throws UnknownHostException, IOException
Trang 22Hàm này tạo một socket TCP với host và cổng xác định, và thực hiện liên kết vớihost ở xa.
Trong hàm này tham số host là hostname kiểu String, nếu host không xác định vàmáy chủ tên miền không hoạt động thì constructor đưa ra ngoại lệ UnknownHostException
Vì một lý do nào đó mà không thể mở được socket thì constructor sẽ đưa ra ngoại lệIOException Có nhiều nguyên nhân khiến cho một liên kết thất bại: host mà ta đang cốgắng kết nối tới không chấp nhận liên kết, kết nối Internet có thể bị ngắt, vấn đề định tuyến
có thể ngăn ngừa các gói tin của ta tới đích
Ví dụ: Viết chương trình để kiểm tra trên 1024 cổng đầu tiên những cổng nào đang cóserver hoạt động
public Socket(InetAddress host, int port)throws IOException
Tương tự như constructor trước, constructor này tạo một socket TCP với thông tin làđịa chỉ của một host được xác định bởi một đối tượng InetAddres và số hiệu cổng port, sau
đó nó thực hiện kết nối tới host Nó đưa ra ngoại lệ IOException nhưng không đưa ra ngoại
lệ UnknownHostException Constructor đưa ra ngoại lệ trong trường hợp không kết nốiđược tới host
public Socket (String host, int port, InetAddress interface, int localPort) throwsIOException, UnknownHostException
Constructor này tạo ra một socket với thông tin là địa chỉ IP được biểu diễn bởi mộtđối tượng String và một số hiệu cổng và thực hiện kết nối tới host đó Socket kết nối tới host
ở xa thông qua một giao tiếp mạng và số hiệu cổng cục bộ được xác định bởi hai tham sốsau Nếu localPort bằng 0 thì Java sẽ lựa chọn một cổng ngẫu nhiên có sẵn nằm trongkhoảng từ 1024 đến 65535
public Socket (InetAddress host, int port, InetAddress interface, int localPort) throwsIOException, UnknownHostException
Constructor chỉ khác constructor trên ở chỗ địa chỉ của host lúc này được biểu diễnbởi một đối tượng InetAddress
Nhận các thông tin về Socket