Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
543,72 KB
Nội dung
Trang 1 Trang 2 LỜI MỞ ĐẦU Ngày nay vấn đề toàn cầu hóa thông tin và tốc độ phát triển của khoa học công nghệ diễn ra một cách nhanh chóng, một kỷ nguyên mới được mở ra; kỷ nguyên của xã hội hóa thông tin. Công nghệ thông tin và truyền thông phát triển đã đưa thế giới chuyển sang thời đại mới, thời đại của công nghệ thông tin. Việc nắm bắt và ứng dụng Công nghệ thông tin trong các lĩnh vực khoa học, kinh tế, xã hội đã đem lại cho các doanh nghiệp và các tổ chức những thành tựu và lợi ích to lớn. Máy tính đã trở thành công cụ đắc lực và không thể thiếu của con người. Các tổ chức, công ty hay các cơ quan cần phải xây dựng hệ thống mạng máy tính cho riêng 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 chuyển tới đích nhanh chóng và đúng đắn. Hầu hết dữ liệu được truyền qua mạng là truyền dưới dạng file. Nhằm tìm hiểu thấu đáo một trong các phương pháp truyền file qua mạng, em chọn đề tài “Tìm hiểu lập trình Socket TCP và ứng dụng truyền file qua mạng”. Trang 3 CHƯƠNG 1: CƠ SỞ LÝ THUYẾT THỰC HIỆN ĐỀ TÀI 1.1. Bộ giao thức TCP/IP. Tầng Transport Trong các ngành tin học và viễn thông, tầng giao vận là tầng thứ tư trong bảy tầng của mô hình OSI. Tầng này chịu trách nhiệm đáp ứng các đòi hỏi về dịch vụ của tầng phiên và đưa ra các yêu cầu dịch vụ đối với tầng mạng. Tầng giao vận cung cấp dịch vụ xuyên dụng chuyển dữ liệu giữa các máy chủ (hosts). Tầng này chịu trách nhiệm sửa lỗi (error recovery), điều khiển lưu lượng dữ liệu, đảm bảo dữ liệu được chuyển tải một cách trọn vẹn. Trong Bộ giao thức liên mạng - TCP/IP, chức năng này thường được thực hiện bởi giao thức định hướng kết nối TCP. Giao vận kiểu datagram, UDP - Giao thức Datagram Người dùng, không cung cấp dịch vụ sửa lỗi hay điều khiển lưu lượng dữ liệu mà dành nhiệm vụ này cho phần mềm ứng dụng. Mục đích của tầng giao vận là cung cấp dịch vụ xuyên dụng chuyển dữ liệu giữa các người dùng đầu cuối, nhờ đó các tầng trên không phải quan tâm đến việc cung cấp dịch vụ truyền dữ liệu đáng tin cậy và hiệu quả. Tậng giao vận thường biến dịch vụ đơn giản, có độ tin cậy thấp của tầng mạng thành một dịch vụ mạnh hơn. Có một danh sách dài liệt kê những dịch vụ có thể được cung cấp bởi tầng này. Không có một dịch vụ nào trong đó là bắt buộc cả, bởi vì không phải chương trình ứng dụng nào cũng yêu cầu tất cả những dịch vụ hiện có. Một số dịch vụ làm lãng phí chi phí phụ, hoặc trong vài trường hợp còn gây phản tác dụng. Định hướng kết nối (Connection-Oriented) Dịch vụ này thường dễ dùng hơn là các mô hình phi kết nối (connection-less model), vì thế cho nên ở những nơi mà tầng mạng chỉ cung cấp dịch vụ phi kết nối, thường có dịch vụ hướng kết nối được xây dựng chồng lên trên nó, tại tầng giao vận. Phân phát theo trật tự đã gửi (Same Order Delivery) Tầng mạng thường không đảm bảo các gói dữ liệu đến theo trật tự mà nó được gửi, song đặc tính này lại là một đặc tính có ưu điểm, nhưng thông thường đây lại là Trang 4 một đặc tính được trọng dụng, vì vậy cho nên tầng giao vận phải đảm bảo việc này. Cách đơn giản nhất là gắn cho mỗi gói dữ liệu một con số, để cho thiết bị nhận sắp xếp lại trật tự của các gói dữ liệu. Dữ liệu đáng tin cậy (Reliable Data) Mạng truyền thông nền tảng có thể có độ nhiễu cao, và dữ liệu nhận được không phải bao giờ cũng giống như dữ liệu đã được gửi. Tầng giao vận có thể sửa lỗi này: thường là bằng cách cung cấp một giá trị tổng kiểm của dữ liệu, giá trị đó phát hiện một số dạng sai sót nhỏ. Đương nhiên, truyền thông tín hiệu hoàn toàn không có lỗi là một việc không khả thi, song giảm đáng kể số lỗi không được phát hiện là một việc có thể thực hiện được. Tầng giao vận còn có thể truyền lại những gói dữ liệu bị thất lạc trên đường truyền. Điều khiển lưu lượng (Flow Control) Lượng bộ nhớ trong máy tính chỉ có hạn. Nếu không điều khiển lưu lượng dữ liệu, thì một máy tính lớn có thể làm ngập một máy khác với lượng thông tin quá lớn làm máy tính đó không kịp xử lý dữ liệu. Hiện tại, vấn đề này không phải là một vấn đề lớn, vì giá của bộ nhớ rẻ, trong khi giá của băng thông (bandwidth) lại đắt, song trước đây, vấn đề này đã là một vấn đề quan trọng. Việc điều khiển lưu lượng cho phép thiết bị nhận dữ liệu nói "Khoan nào!" trước khi nó bị tràn. Đôi khi chức năng này đã được mạng nền tảng cung cấp, song tầng giao vận có thể gắn thêm chức năng này nếu chưa có. Định hướng byte (Byte Orientation) Thay vì giải quyết các vấn đề theo từng gói dữ liệu, tầng giao vận có thể bổ sung khả năng nhìn dữ liệu truyền thông như là một dòng các byte (ký tự). Cách này dễ giải quyết hơn là khi các gói dữ liệu có kích thước ngẫu nhiên, song nó ít khi khớp với mô hình truyền thông mà thông thường sẽ là một dãy các thông điệp có kích thước do người dùng xác định. Cổng (Port) Về căn bản, cổng là phương pháp đánh địa chỉ các thực thể khác nhau tại cùng một địa điểm. Ví dụ, dòng đầu tiên trên một địa chỉ gửi thư có thể hiểu là một dạng Trang 5 cổng, nó phân biệt giữa các cư dân khác nhau trong cùng một ngôi nhà. Các chương trình ứng dụng lắng nghe thông tin trên các cổng riêng của nó, và chính vì vậy mà chúng ta có thể dùng nhiều chương trình ứng dụng mạng trong cùng một lúc. Trên Internet có rất nhiều dịch vụ của tầng giao vận, song hai dịch vụ thường dùng nhất là TCP và UDP. TCP phức tạp hơn, nó cung cấp kết nối và dòng định hướng byte, dòng này hầu như không có lỗi, với các dịch vụ điều khiển lưu lượng dữ liệu, nhiều cổng, và phân phát dữ liệu đúng trật tự. UDP là một dịch vụ datagram đơn giản, nó cung cấp khả năng giảm lỗi hạn chế (limited error reduction) và có nhiều cổng. TCP là chữ viết tắt của thuật ngữ tiếng Anh "Transmission Control Protocol" - tạm dịch là "Giao thức điều khiển truyền vận". UDP là chữ viết tắt của thuật ngữ tiếng Anh "User Datagram Protocol" - tạm dịch là "Giao thức datagram người dùng". Các lựa chọn khác bao gồm Giao thức kiểm soát tắc nghẽn gói dữ liệu (Datagram Congestion Control Protocol - DCCP) và Giao thức truyền vận điều khiển dòng (Stream Control Transmission Protocol - SCTP). Một vài dịch vụ, chẳng hạn như định hướng kết nối (connection orientation) có thể được cài đặt tại tầng giao vận hay tầng mạng. Tư tưởng là tầng mạng cài đặt một tập các lựa chọn nào dễ nhất: đối với một số mạng truyền thông, cài đặt truyền thông phi kết nối là việc dễ dàng nhất, trong khi đối với các mạng khác, việc cài đặt truyền thông hướng kết nối lại dễ hơn cả. Tầng giao vận sử dụng nhóm các lựa chọn đơn giản nhất này để cài đặt bất cứ tổ hợp của các lựa chọn nào mà trong thực tế được mong muốn. Giao thức trao đổi dữ liệu "có liên kết" (connection - oriented) TCP được sử dụng ở tầng vận chuyển để đảm bảo tính chính xác và tin cậy việc trao đổi dữ liệu dựa trên kiến trúc kết nối "không liên kết" ở tầng liên mạng IP. Trang 6 Hình 1.1 Mô hình tham chiếu và giao thức TCP/IP UDP (User Datagram Protocol) là một trong những giao thức cốt lõi của giao thức TCP/IP. Dùng UDP, chương trình trên mạng máy tính có thể gởi những dữ liệu ngắn được gọi là datagram tới máy khác. UDP không cung cấp sự tin cậy và thứ tự truyền nhận mà TCP làm. Các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo. Tuy nhiên UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian. Do bản chất không trạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu. 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 Trang 7 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ủ. Các header của TCP và UDP khác nhau ở kích thước (20 và 8 byte) nguyên nhân chủ yếu là do TCP phải hộ trợ nhiều chức năng hữu ích hơn(như khả năng khôi phục lỗi). UDP dùng ít byte hơn cho phần header và yêu cầu xử lý từ host ít hơn. Đối với giao thức TCP dùng cho mạng WAN; không cho phép mất gói tin; đảm bảo việc truyền dữ liệu; tốc độ truyền thấp hơn UDP. Đối với giap thức UDP dùng cho mạng LAN; cho phép mất dữ liệu; không đảm bảo; tốc độ truyền cao, VolP truyền tốt qua UDP. 1.2. Giao thức IP. Giao thức Internet phiên bản 4 (viết tắt IPv4, từ tiếng Anh Internet Protocol version 4) là phiên bản thứ tư trong quá trình phát triển của các giao thức Internet (IP). Đây là phiên bản đầu tiên của IP được sử dụng rộng rãi. IPv4 cùng với IPv6 (giao thức Internet phiên bản 6) là nòng cốt của giao tiếp internet. Hiện tại, IPv4 vẫn là giao thức được triển khai rộng rãi nhất trong bộ giao thức của lớp internet. Giao thức này được công bố bởi IETF trong phiên bản RFC 791 (tháng 9 năm 1981), thay thế cho phiên bản RFC 760 (công bố vào tháng giêng năm 1980). Giao thức này cũng được chuẩn hóa bởi bộ quốc phòng Mỹ trong phiên bản MIL-STD- 1777. IPv4 là giao thức hướng dữ liệu, được sử dụng cho hệ thống chuyển mạch gói (tương tự như chuẩn mạng Ethernet). Đây là giao thức truyền dữ liêu hoạt động dựa trên nguyên tắc tốt nhất có thể, trong đó, nó không quan tâm đến thứ tự truyền gói tin cũng như không đảm bảo gói tin sẽ đến đích hay việc gây ra tình trạng lặp gói tin ở đích đến. Việc xử lý vấn đề này dành cho lớp trên của chồng giao thức TCP/IP. Tuy nhiên, IPv4 có cơ chế đảm bảo tính toàn vẹn dữ liệu thông qua sử dụng những gói kiểm tra (checksum). Địa chỉ IP đang được sử dụng hiện tại (IPv4) có 32 bit chia thành 4 Octet ( mỗi Octet có 8 bit, tương đương 1 byte ) cách đếm đều từ trái qua phải bít 1 cho đến bít 32, các Octet tách biệt nhau bằng dấu chấm (.). VD 1 địa chỉ IP như sau: 196.84.156.67. Trang 8 Địa chỉ IP được chia thành 4 số giới hạn từ 0 - 255 (vì 255 tương đương 11111111 (ở hệ nhị phân) là số lớn nhất có 8 bit). Địa chỉ IP chia ra 5 lớp A,B,C, D, E. Hiện tại đã dùng hết lớp A,B và gần hết lớp C, còn lớp D và E Tổ chức internet đang để dành cho mục đích khác không phân, nên chúng ta chỉ nghiên cứu 3 lớp đầu. Bit nhận dạng là những bit đầu tiên - của lớp A là 0, của lớp B là 10, của lớp C là 110. Lớp D có 4 bit đầu tiên để nhận dạng là 1110, còn lớp E có 4 bít đầu tiên để nhận dạng là 1111. Do đó địa chỉ ví dụ ở trên bắt đầu bằng 11000100 nên thuộc lớp C. Một địa chỉ IP được phân biệt bởi hai phần, phần đầu gọi là Network ID (địa chỉ mạng) và phần sau là Host ID. Ví dụ đối với lớp A (có địa chỉ từ 0.0.0.0 đến 127.0.0.0 ), bit thứ nhất là bit nhận dạng lớp A = 0, 7 bit còn lại trong Octet thứ nhất dành cho địa chỉ mạng, 3 Octet còn lại có 24 bit dành cho địa chỉ của máy chủ. Do vậy, trên lớp A, có thể phân cho 126 mạng khác nhau, và mỗi mạng có thể có tối đa 16777214 máy host. Sự khác nhau đáng kể nhất giữa IPv4 và IPv6 là chiều dài của địa chỉ nguồn và địa chỉ của chúng. Việc chuyển sang sử dụng IPv6 là do ngày càng thiếu về số địa chỉ IP. Giao thức IPv6 này có một không gian địa chỉ lớn hơn so với giao thức IPv4. iao thức IPv4 sử dụng một địa chỉ nguồn và địa chỉ đích là 32bit. Các địa chỉ này được biểu diễn thành bốn phần. Một địa chỉ IPv4 điển hình có dạng như 192.168.0.1. Tương phản với IPv4, địa chỉ IPv6 có chiều dài là 128bit. Điều đó cho phép có thể biểu diễn đến 3.4x1038 (340.000.000.000.000.000.000.000.000.000.000.000.0 00) địa chỉ. Có một vài sự khác nhau trong cách biểu diễn địa chỉ của IPv6. Một địa chỉ IPv6 thường được viết thành 8 nhóm, mỗi nhóm gồm có 4 số hex và mỗi nhóm được tách biệt với nhau bằng dấu “:”. Ví dụ như sau thể hiện điều này 2001:0f68:0000:0000:0000:0000:1986:69af. Bạn đang xem xét địa chỉ mẫu ở trên và nghĩ rằng việc đánh một địa chỉ IPv6 phải rất mất thời gian và công sức? Nhưng không phải như vậy, địa chỉ IPv6 chỉ có thể được viết vắn tắt bằng việc giảm thiểu các số 0. Có hai nguyên tắc phải tuân theo ở đây khi biểu diễn một địa chỉ IP. Đầu tiên, một dãy bốn số 0 liên tục có thể được thay Trang 9 thế bằng hai dấu “::”. Bằng cách đó địa chỉ IPv6 ở trên có thể được viết tắt như sau: 2001:0f68::0000:0000:0000:1986:69af. Trong ví dụ ở trên, chúng ta chỉ có thể ước lượng một khối các chữ số 0 bởi vì nguyên tắc này phát biểu rằng chỉ có một cặp “::” trong một địa chỉ. Rõ ràng, địa chỉ mà đang ví dụ ở trên vẫn còn rất nhiều chữ số cần phải đánh. Tuy nhiên, nguyên tắc thứ hai sẽ cho phép bạn thực hiện địa chỉ này ngắn hơn. Nguyên tắc thứ hai nói rằng, các số 0 trong một nhóm có thể được bỏ qua. Nếu một khối 4 số bắt đầu của nó là số 0 thì số 0 này có thể được lược bỏ bớt để lại là 3 số 0 trong khối. Nếu khối ba số đó cũng lại bắt đầu với một số 0 đứng đầu thì ta có thể tiếp tục loại bỏ. Và cứ như vậy đến khi gặp số khác 0 trong nhóm thì dừng. Trường hợp nếu 4 số trong nhóm đều là 0 thì số được giữ lại cuối cùng là một số 0. Nếu cứ nói mãi mà không biểu diễn trong ví dụ cụ thể để các bạn dễ theo dõi thì đó là một thiếu sót. Dưới đây là những gì mà chúng ta có thể áp dụng cả hai nguyên tắc đó cho địa chỉ ví dụ: 2001:0f68:0000:0000:0000:0000:1986:69af 2001:f68:000:000:000:000:1986:69af 2001:f68:00:00:00:00:1986:69af 2001:f68:0:0:0:0:1986:69af 2001:f68::1986:69af 1.3. Lập trình mạng trong .NET. 1.3.1. Nền tảng của .NET. Microsoft .Net không phải là một ngôn ngữ lập trình, đó là một không gian làm việc tổng hợp bởi bốn bộ ngôn ngữ lập trình: C#, VB.NET, Managed C++, and J# .NET. ở đó có sự chồng gối lên nhau của các ngôn ngữ, và được định nghĩa trong FCL (framework class library). Microsoft .Net bao gồm 2 phần chính: Framework và Intergrated Development Enviroment (IDE). Framework cung cấp những gì cần thiết và căn bản, là khuôn dạng hay môi trường hỗ trợ các hạ tầng cơ sở theo một quy ước nhất định để công việc được thuận tiện. IDE cung cấp một môi trường giúp chúng ta triển khai dễ dàng và được nhanh chóng các ứng dụng dựa trên nền tảng .Net. Trang 10 [...]... IPEndPoint(ipAddress[0], 5656); //tao socket Socket clientSock = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 1); string filePath = ""; //tao duong dan cho file voi ky tu / fileName = fileName.Replace("\\", "/"); while (fileName.IndexOf("/") > -1) { filePath += fileName.Substring(0, fileName.IndexOf("/") + } fileName = fileName.Substring(fileName.IndexOf("/") + 1); byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);... (fileName.IndexOf("/") > -1) { filePath += fileName.Substring(0, fileName.IndexOf("/") + } fileName = fileName.Substring(fileName.IndexOf("/") + 1); byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName); if (fileNameByte.Length > 850 * 1024) { curMsg = "File size is more than 850kb, please try with small file. "; return; } curMsg = "Buffering "; byte[] fileData = File. ReadAllBytes(filePath + fileName); byte[]... Encoding.ASCII.GetBytes(fileName); if (fileNameByte.Length > 850 * 1024) { curMsg = "File size is more than 850kb, please try with small file. "; return; } curMsg = "Buffering "; byte[] fileData = File. ReadAllBytes(filePath + fileName); byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length]; byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); fileNameLen.CopyTo(clientData, 0); fileNameByte.CopyTo(clientData,... truyền file khác mà 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 Đề tài “Tìm hiểu lập trình socket TCP và ứng dụng truyền file qua mạng” đã đạt được kết quả nhất định Kết qua đạt được: • Về cơ sở lý thuyết, đồ án đã trình bày được các nội dung về mạng máy tính, sơ lược về ngôn ngữ NET lập trình Socket TCP nói chung và lập trình Socket. .. nén chỉ cần một lần duyệt file và có thể nén trên dữ liệu phát sinh theo thời gian thực Trang 28 CHƯƠNG 3: ĐÁNH GIÁ KẾT QUA VÀ HƯỚNG PHÁT TRIỂN 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ó độ tin cậy cao bởi... SendFile(string fileName) { try { //lay dia chi IP tren textbox IPAddress[] ipAddress = Dns.GetHostAddresses(txtDiaChiIP.Text); IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656); //tao socket Socket clientSock = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 1); string filePath = ""; //tao duong dan cho file voi ky tu / fileName = fileName.Replace("\\", "/"); while (fileName.IndexOf("/")... object Trang 19 CHƯƠNG 2: XÂY DỰNG GIẢI PHÁP 2.1 Một số phương thức sử dụng trong chương trình Phương thức gửi file, phương thức này gửi file từ client tới server, với tham số đầu vào là file cần gửi, lấy địa chỉ IP nhập vào, khởi tạo socket, rồi gửi file tới server public void SendFile(string fileName) { try { //lay dia chi IP tren textbox IPAddress[] ipAddress = Dns.GetHostAddresses(txtDiaChiIP.Text);... BinaryWriter (File. Open(receivedPath + "/" + fileName, FileMode.Append)); ; bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen); curMsg = "Saving file "; Trang 21 bWrite.Close(); clientSock.Close(); curMsg = "Reeived & Saved file; Server Stopped."; } } catch (Exception ex) { curMsg = "File Receving error."; } 2.2 Một số giao diện chính của chương trình: Giao diện nén file Server Client Trang... là lập trình ứng mạng dựa trên cơ chế socket Trong chương này sẽ trình bầy một ứng dụng của lập trình socket TCP là xây dựng chương trình truyền file qua mạng giữa hai máy tính bằng Java Socket TCP Phân tích chương trình Chương trình ứng dụng được xây dựng theo mô hình clients/server Chương trình bao gồm hai mô đun server và client Người sử dụng có thể truyền file từ phía client cho server Trang 30... File. ReadAllBytes(filePath + fileName); byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length]; byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); fileNameLen.CopyTo(clientData, 0); fileNameByte.CopyTo(clientData, 4); fileData.CopyTo(clientData, 4 + fileNameByte.Length); curMsg = "Connection to server "; clientSock.Connect(ipEnd); curMsg = "File sending "; Trang 33 clientSock.Send(clientData); . không đồng bộ. Sử dụng Socket không đồng bộ. Để lập trình không đồng bộ với Socket chúng ta sử dụng các phương thức cho việc sử dụng bất đồng bộ. Trang 14 Các phương thức cho việc lập trình bất đồng. internet. Giao thức này được công bố bởi IETF trong phiên bản RFC 791 (tháng 9 năm 1981), thay thế cho phiên bản RFC 760 (công bố vào tháng giêng năm 1980). Giao thức này cũng được chuẩn hóa bởi bộ quốc. 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 Trang 7 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