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 (2.43 MB, 21 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
Giảng viên hướng dẫn: TS. Trần Quang VinhSinh viên thực hiện:
Trịnh Thanh Chương 20192725Nguyễn Long Cầm 20192715Lê Quang Hưng
Lưu Văn Bắc
Hà Nội, 04-2023
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">Ngày nay, công nghệ thông tin đã và đang được ứng dụng sâu rộng trong mọilĩnh vực. Đây là công cụ không thể thiếu cho việc phát triển thương mại, vận hànhhệ thống trong các tổ chức và phục vụ nhu cầu cơng việc, giải trí cá nhân. Trong đó,mạng máy tính và internet đóng vai trị hết sức quan trọng. Máy tính đã trở thànhcơng cụ đắc lực và không thể thiếu của con người. Các tổ chức, công ty cần phải xâydựng hệ thống mạng máy tính riêng cho mình để trao đổi dữ liệu giữa các bộ phận.Dữ liệu được truyền đi trên mạng phải đảm bảo dữ liệu được truyền tới đích nhanhchóng và đúng đắn. Hầu hết dữ liệu truyền qua mạng là truyền dưới dạng file.Truyền file qua mạng là một trong những ứng dụng phổ biến trên mạng LAN vàInternet như: tải xuống các file từ một máy chủ file ở xa, gửi/nhận thư điện tử.Truyền file qua mạng dựa trên Socket TCP là một phương pháp truyền file có độ tincậy cao bởi vì trước khi truyền nó cần thiết lập thành công kênh truyền dữ liệu.Không phải là phương pháp thay thế hoàn toàn những phương pháp truyền file khácmà ta đã từng sử dụng. Bản chất của phương pháp truyền file dựa vào Socket TCP lànhằm tăng thêm hiệu xuất làm việc. Đó là lý do chúng em chọn đề tài: “Lập trìnhSOCKET ứng dụng chia sẻ file sử dụng cơ chế client – server”.
Chúng em cũng xin cảm ơn thầy TS. Trần Quang Vinh đã tận tình hướng dẫn, giúpđỡ chúng em để hoàn thành tốt đề tài này. Chúng em chúc thầy luôn mạnh khỏe,công tác tốt và hướng dẫn nhiều thế hệ sinh viên hơn nữa.
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">Hình 1. 1: Mơ hình mạng cục bộ LAN...5
Hình 1. 2: Cấu trúc gói tin IP...7
Hình 1. 3: Cấu trúc của địa chỉ IP...8
Hình 1. 4: Phân lớp địa chỉ IP...8
Hình 1. 5: Cấu trúc TCP Header...10
Hình 2. 1: Lập trình SOCKET...11
Hình 2. 2: Kết nối Client - Server...13
Hình 2. 3: Mơ hình Client - Server...13
Hình 2. 4: Quá trình nhận dữ liệu qua socket...14
Hình 2. 5: Ngơn ngữ C#...15
Hình 2. 6: Giao diện Server ban đầu...17
Hình 2. 7: File cần gửi...18
Hình 2. 8: Thơng báo gửi file thành cơng...18
Hình 2. 9: Thơng báo nhận thành cơng...19
Hình 2. 10: Kết quả thu được ...19
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"><b>1.1.1. Khái niệm</b>
Mạng máy tính hay hệ thống mạng (computer network hay network system) là sự kết hợp các máy tính lại với nhau thông qua các thiết bị nối kết mạng và phương tiện truyền thông (giao thức mạng, môi trường truyền dẫn) theo một cấu trúcnào đó và các máy tính này trao đổi thơng tin qua lại với nhau
Hình 1. 1: Mơ hình mạng cục bộ LAN
<b>1.1.2. Phương thức hoạt động của mạng máy tính</b>
Một số thiết bị chyên dụng như thiết bị chuyển mạch, bộ định tuyến và điểmtruy cập tạo thành một hệ thống của mạng máy tính.
Cơng tắc kết nối giúp bảo mật nội bộ của máy tính với các thiết bị khác đượckết nối mạng trong tổ chức.Điểm truy cập chính là cơng tắc kết nối thiết bị với mạng mà không cần sử dụng dây cáp.
Bộ định tuyến kết nối mạng với các nhà mạng khác và hoạt động giống như một nhà điều phối. Bộ định tuyết kết nối mạng bên trong nhà và doanh nghiệp vớithế giơi và giúp bảo vệ thông tin khỏi các mối đe dọa bảo mật bên ngồi.
Cơng tắc xác định duy nhất một thiết bị bằng địa chỉ MAC, bộ định tuyến xácđịnh duy nhất kết nối mạng của thiết bị bằng dịa chỉ IP được chỉ định mạng.
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Địa chỉ MAC và IP xác định duy nhất các thiết bị và kết nối mạng tương ứngtrong một mang.
<b>1.2.Tổng quan về TCP/IP</b>
<b>1.2.1. Bộ giao thức liên mạng (IP Protocol)</b>
Các giao thức liên mạng là bộ giao thức cho các hệ thống mở nổi tiếng nhấttrên thế giới bởi vì chúng có thể được sử dụng để giao tiếp qua bất kỳ các liên mạngnào cũng như thích hợp cho các giao tiếp trong mạng LAN và mạng WAN. Các giaothức liên mạng bao gồm một bộ các giao thức truyền thơng, trong đó nổi tiếng nhấtlà Giao thức điều khiển truyền tải (TCP - Transmission Control Protocol) và Giaothức liên mạng (IP – Internet Protocol) hoạt động ở tầng 4 và tầng 3 trên mơ hìnhOSI.
Ngồi hai giao thức này, bộ giao thức IP còn đặc tả nhiều giao thức cho tầngứng dụng, ví dụ như giao thức cho dịch vụ thư điện tử, giao thức mô phỏng thiết bịđầu cuối và giao thức truyền tải tập tin. Bộ giao thức liên mạng lần đầu tiên đượcphát triển vào giữa những năm của thập niên 70 khi Văn phòng các dự án nghiêncứu chuyên sâu của bộ quốc phòng Mỹ (DARPA-Defense Advanced ResearchProjects Agency) quan tâm đến việc xây dựng một mạng chuyển mạch gói(packetswitched network) cho phép việc trao đổi thơng tin giữa các hệ thống máytính khác nhau của các viện nghiên cứu trở nên dễ dàng hơn. Sau đó TCP/IP đượctích hợp vào hệ điều hành UNIX phiên bản BSD (Berkeley Software Distribution)trở thành nền tảng cho mạng Internet và dịch vụ WWW (World Wide Web).
Giao thức liên mạng IP (Internet Protocol) là một giao thức mạng hoạt động ởtầng 3 của mơ hình OSI, nó qui định cách thức định địa chỉ các máy tính và cáchthức truyền tải các gói tin qua một liên mạng. Cùng với giao thức TCP, IP trở thànhtrái tim của bộ giao thức Internet. IP có hai chức năng chính: cung cấp dịch vụtruyền tải dạng khơng nối kết để chuyển tải các gói tin qua một liên mạng; và phânmãnh cũng như tập hợp lại các gói tin để hỗ trợ cho tầng liên kết dữ liệu với kíchthước đơn vị truyền dữ liệu là khác nhau.
Cấu trúc IP header
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Hình 1. 2: Cấu trúc gói tin IP
Version: Xác định phiên bản của giao thức đang được sử dụng
IP Header Length: Xác định chiều dài của phần tiêu đề của gói tin, tính bằngđơn vị là từ -32 bits.
Type of Service: Đặc tả mức độ quan trọng mà giao thức phía trên muốn xửlý gói in.
Total Length: Đặc tả chiều dài, tính bằng type của cả gói tin IP, bao gồm cảphần dữ liệu và tiêu đề.
Indentification: Số nguyên nhận dạng gói tin dữ liệu hiện hành, sử dụng đểráp lại cá phân đoạn của gói tin.
Flags: Gồm 3 bits, bit có trọng số nhỏ để xác định gói tin có bị phân đoạn haykhơng. Bit thứ 2 xác định có phải đây là phân đoạn cuối cùng của gói tin haykhơng. Bit có trọng số lớn nhất chưa sử dụng.
Fragment Offset: Biểu thị vị trí của phân đoạn dữ liệu so với vị trí ban đàucủa gói dữ liệu gốc, nó cho phép máy nhận xây dựng lại gói tin ban đầu.
Time to live: Lưu giữ bộ đếm thời gian, giá trị sẽ được giảm dần đến khi nócó giá trị là 0 thì gói tin sẽ bị xóa; giúp ngăn ngừa tình trạng gói tin đượctruyền đi lịng vịng khơng bao giờ đến được đích.
Protocol: Biểu hiện giao thức ở tầng trên sẽ nhận gói tin khi nó đã được giaothức IP xử lý.
Header Checksum: kiểm tra tính tồn vẹn của phần tiêu đề.Source address: Địa chỉ của máy gửi gói tin.
Destination address: Địa chỉ của máy nhận gói tin.
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">Options: Tùy chọn cho phép để hỗ trợ một số vấn đề, chẳng hạn vấn đề bảo mật.
Data: Chứa dữ liệu của tầng trên gửi xuống cần truyền đi.Cấu trúc địa chỉ IP
Mỗi máy tính trên mạng TCP/IP phải được gán một địa chỉ luận lý có chiềudài 32 bits, gọi là địa chỉ IP.
Hình 1. 3: Cấu trúc của địa chỉ IP
32 bits của địa chỉ IP được chia thành 2 phần: Phần nhận dạng mạng(network id) và phần nhận dạng máy tính (Host id). Phần nhận dạng mạng đượcdùng để nhận dạng một mạng và phải được gán bởi Trung tâm thông tin mạngInternet (InterNIC – Internet Network Information Center) nếu muốn nối kết vàomạng Internet. Phần nhận dạng máy tính dùng để nhận dạng một máy tính trong một
Hình 1. 4: Phân lớp địa chỉ IP
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><b>1.2.2. Bộ giao thức TCP</b>
Transmission Control Protocol (TCP) là giao thức tiêu chuẩn trên Internet đảm bảo trao đổi thành công các gói dữ liệu giữa các thiết bị qua mạng. TCP là giao thứctruyền tải cơ bản cho nhiều loại ứng dụng, bao gồm máy chủ web và trang web, ứngdụng email, FTP và các ứng dụng ngang hàng.
TCP hoạt động với giao thức Internet (IP) để chỉ định cách dữ liệu được trao đổitrực tuyến. IP chịu trách nhiệm gửi từng gói đến đích của nó, trong khi TCP đảm bảo rằng các byte được truyền theo thứ tự mà chúng được gửi mà khơng có lỗi hoặcthiếu sót nào. Hai giao thức kết hợp với nhau được gọi là TCP/IP.
<b>Phương thức hoạt động của TCP</b>
Máy khách gửi cho máy chủ một gói <b>SYN </b>— một yêu cầu kết nối từ portnguồn của nó đến port đích đến của máy chủ.
Máy chủ phản hồi bằng gói <b>SYN/ACK</b>, xác nhận việc nhận được yêu cầu kếtnối.
Máy khách nhận gói <b>SYN/ACK </b>và trả lời bằng gói ACK của chính nó.
Sau khi kết nối được thiết lập, TCP hoạt động bằng cách chia nhỏ dữ liệu đãtruyền thành các segment (phân đoạn), mỗi segment được đóng gói thành một gói dữ liệu và được gửi đến đích của nó.
<b>Cấu trúc TCP Header</b>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">Hình 1. 5: Cấu trúc TCP HeaderSource port (16 bit): Số cổng của thiết bị gửi.Destination port (16 bit): Số cổng của thiết bị nhận.
Sequence number (32 bit): Dùng để đánh số thứ tự gói tin (từ số sequense nó sẽ tính ra được số byte đã được truyền)
Acknowledgment number (32 bit): Dùng để báo đã nhận được gói tin nào vàmong nhận được byte mang số thứ tự nào tiếp theo.
Data Offset (4 bit): Cho biết toàn bộ header dài bao nhiêu tính theo đơn vịword (1 Word = 4 byte).
RSV (4 bit): Đều được thiết lập bằng 0.
Flags (9 bit): Được sử dụng để thiết lập kết nối, gửi dữ liệu và chấm dứt kêtnối.
Windows (16 bit): Số lượng byte được thiết bị sẵn sàng tiếp nhận.Checksum (16 bit): Kiểm tra lỗi của toàn bộ TCP segment.
Urgent pointer (16 bit): Sử dụng trong trường hợp cần ưu tiên dữ liệu.Options (tối đa 32 bit): Cho phép thêm vào TCP các tính năng khác.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11"><b>2.1.1. Khái niệm</b>
Socket là một điểm cuối end-point trong liên kết truyền thông hai chiều biểu diễnkết nối giữa Client – Server. Các lớp Socket được rang buộc với một cổng port để cátầng TCP có thể định danh tương ứng mà dữ liệu sẽ được gửi tới.
Hình 2. 1: Lập trình SOCKETĐịa chỉ Socket có dạng: {IP Address; Port Number}Các loại Socket:
Socket hướng kết nối (TCP Socket)Socket không hướng kết nối (UDP Socket)Raw Socket
<b>2.1.2. Phương thức hoạt động của Socket</b>
Chức năng của Socket chính là kết nối giữa Client – Server thông qua TCP/IP vàUDP để truyền cũng như nhận dữ liệu qua Internet. Giao diện Socket chỉ có thể hoạtđộng khi đã có số hiệu cổng của 2 ứng dụng cần trao đổi dữ liệu và thông số IP.
Socket chỉ hoạt động khi 2 ứng dụng cần truyền thông tin đã đáp ứng đủ cácđiều kiện:
2 ứng dụng có thể cùng nằm trên một máy hoặc nằm trên 2 máy khác nhau.
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">Nếu ứng dụng cùng nằm trên một máy thì số hiệu cổng phải khơng trùng với nhau.
<b>2.1.3. Ngun tắc</b>
Mơ hình client-server là một mơ hình nổi tiếng trong mạng máy tính, được ápdụng rất rộng rãi và là mơ hình của mọi trang web hiện có. Ý tưởng của mơ hình nàylà máy con (đóng vài trị là máy khách) gửi một yêu cầu (request) đến máy chủ(đóng vai trị người cung ứng dịch vụ), máy chủ sẽ xử lý và trả kết quả về cho máykhách.
Tại phía server:
Thơng thường, một chương trình server chạy trên một máy tính cụ thể,chương trình này có một socket (server socket), socket được xác định bởi portnumber cụ thể. Các chương trình cụ thể. Các chương tình cụ thể phục vụ trên serverchỉ chờ đợi, lắng nghe tại port number của nó để phục phục vụ khi có client kết nối.
Tại phía client:
Các client biết địa chỉ của máy tính trên đó chương trình server đang chạy vàdanh sách các cổng máy chủ đang lắng nghe. Để thực hiện kết nối, Client cố gắngtạo một liên kết với máy chủ tại cổng mà chương trình máy chủ đang lắng nghe.Client cũng phải tự định danh chính nó với server để gắn với một cổng địa phươngcái sẽ được dùng trong suốt quá trình kết nối này. Thơng thường nó được gán bởi hệđiều hành.
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">Hình 2. 2: Kết nối Client - Server
Hình 2. 3: Mơ hình Client - Server
Nếu chương trình máy chủ chấp nhận kết nối của client. Khi chấp nhận, máychủ có được một socket mới bị ràng buộc vào vùng cổng cùng cổng địa phương vàthông tin đầu cuối (remote endpoint) của nó chính là port number của client. Nó đãtạo ra một socket mới để chăm sóc client vừa được chấp nhận kết nối và tiếp tụclắng nghe tại ổ cắm ban đầu (Server Socket) cho các yêu cầu khác kết nối.
Về phía Client, nếu kết nối được chấp nhận, một ổ cắm được tạo thành côngvà Client có thể sử dụng socket để giao tiếp với chương trình chủ. Các Client và
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">server có thể giao tiếp bằng cách ghi hay đọc từ ổ cắm của chúng.
Hình 2. 4: Quá trình nhận dữ liệu qua socket
Ta có thể chia q trình nhận dữ liệu qua socket ở giữa Client và Server ở hình 2.4thành 4 giai đoạn như sau:
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe yêu cầu nối kết. Server sẵn sàng phục vụ Client.socket(): Server yêu cầu tạo một socketđể có thể sử dụng các dịch vụ của tầng vận chuyển.
bind(): Server yêu cầu gán số hiệu cổng (port) cho socket.
listen(): Server lắng nghe các yêu cầu nối kết từ các client trên cổng đãđược gán.
Giai đoạn 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server.socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ củatầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng còn rảnh cho socket của Client.
connect(): Client gởi yêu cầu nối kết đến server có địa chỉ IP và Port xácđịnh.
accept(): Server chấp nhận nối kết của client, khi đó một kênh giao tiếp ảođược hình thành, Client và server có thể trao đổi thơng tin với nhau thông qua kênh ảo này.
Giai đoạn 3: Trao đổi thông tin giữa Client và Server.
Sau khi chấp nhận yêu cầu nối kết, thông thường server thực hiện lệnh read() và nghẽn cho đến khi có thơng điệp yêu cầu (Request Message) từclient gởi đến.
Server phân tích và thực thi yêu cầu. Kết quả sẽ được gởi về client bằnglệnh write().
Sau khi gởi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả(ReplyMessage) từ server bằng lệnh read().
Giai đoạn 4: Kết thúc phiên làm việc.
Các câu lệnh read(), write() có thể được thưc hiện nhiều lần (ký hiệubằng hình ellipse).
Kênh ảo sẽ bị xóa khi Server hoặc Client đóng socket bằng lệnh close().Dữ liệu ghi vào luồng đầu ra trên Socket của Client sẽ nhận được trên luồngđầu vào chủ Socket tại server. Và ngược lại dữ liệu ghi vào luồng đầu ra trên Socketcủa Server sẽ nhận được trên luồng đầu vào của Socket tại Client.
<b>2.2. Lập trình C#</b>
Hình 2. 5: Ngơn ngữ C#
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">C# là một ngơn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft,là phần khởi đầu cho kế hoạch .NET của họ. Microsoft phát triển C# dựa trên C++ và Java. C# được miêu tả là ngơn ngữ có được sự cân bằng giữa C++, Visual Basic,Delphi và Java.
C# được thiết kế chủ yếu bởi Anders Hejlsberg kiến trúc sư phần mềm nổitiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC.
C# là một ngôn ngữ lập trình thuần hướng đối tượng. Lập trình hướng đối tượng (OOP: Object-oriented programming) là một phương pháp lập trình có 4 tínhchất. Đó là tính trừu tượng (abstraction), tính đóng gói (encapsulation), tính đa hình(polymorphism) và tính kế thừa (inheritance). C# hỗ trợ cho chúng ta tất cả những đặc tính trên.
<b>2.3. Chạy chương trình2.3.1. Giới thiệu</b>
Trao đổi dữ liệu giữa hai máy tính trong mạng thực chất là sự trao đổi dữ liệugiữa hai chương trình ứng dụng chạy trên hai máy tính đó. Một chương trình đượcgán nhãn là server và một chương trình được gán nhãn là client, phương pháp sửdụng phổ biến là lập trình ứng dụng mạng dựa trên cơ chế socket. Trong chươngtrình này sẽ trình bày một ứng dụng lập trình socket TCP xây dựng chương trìnhchia sẻ file qua mạng bằng C#.
Sau khi Server truyền file thành công. Để nhận file , chọn thử mục Receive. File bây giờ đã có trong đường dẫn nhận file đã cài đặt.
Để truyền các file tiếp theo làm tương tự những bước trên.
</div>