2009-04-07 25 views
9

Tôi muốn gửi dữ liệu qua internet thông qua ứng dụng dành cho máy tính để bàn. Tôi biết một chút về ổ cắm. Tôi đã chuyển dữ liệu trong mạng LAN, nhưng bây giờ tôi muốn chuyển dữ liệu qua internet. Cách tốt nhất để chuyển cả số lượng lớn và nhỏ dữ liệu là gì?Làm cách nào để gửi dữ liệu qua internet bằng ổ cắm?

Hệ thống của tôi được kết nối với máy chủ có quyền truy cập Internet. Địa chỉ IP của hệ thống của tôi là động. Tôi không biết cách gửi dữ liệu đến một hệ thống khác được kết nối với internet. Tôi có cần tìm địa chỉ router không? (Địa chỉ IP của tôi được tạo ra là 192.168.1.15).

Có sử dụng ổ cắm đủ hoặc HTTP được yêu cầu không?

+0

Tại lớp bạn đang nói đến, không có nhiều sự khác biệt giữa mạng LAN và internet (bạn thực sự chỉ cần suy nghĩ về NAT). Bạn đang chuyển loại dữ liệu nào? Nếu bạn đang nhắm mục tiêu nhiều nền tảng, hãy nhớ rằng các biểu diễn dữ liệu ASCII khác nhau giữa các hệ điều hành. –

Trả lời

15

Ổ cắm đủ nếu không có tường lửa/proxy.

Tuy nhiên, khi Internet có liên quan (không phải là kết nối nhanh nhất), tôi khuyên bạn nên thuận tiện vì bạn nên chọn từ xa hơn http. Bằng cách đó, ngay cả khi trong tương lai các thay đổi thiết lập, và tường lửa/proxy tham gia vào phương trình, bạn không nên lo lắng.

+0

OK, đó là ok câu trả lời này đã được downvoted. Tôi muốn biết lý do - chỉ vì mục đích giáo dục thôi :) –

+0

Được bầu chọn vì tôi không thấy lý do nào cho việc giảm giá. :) Plus Tôi thích câu trả lời. –

+0

Tôi cho là do nhầm lẫn – Mohanavel

1

Trong câu hỏi của bạn, bạn kết hợp nhiều thứ khác nhau. Ổ cắm là một trừu tượng cho truyền thông mạng. Bạn chắc chắn sẽ cần một ổ cắm để giao tiếp qua mạng. Tuy nhiên, có thể bạn sẽ không thấy rằng một ổ cắm được sử dụng (như trong một trình duyệt web). Http là một giao thức truyền thông. Đây là những gì đi qua một kênh truyền thông.

0

Visual Studio có rất nhiều cơ sở tốt để tạo và tiêu thụ Dịch vụ web XML SOAP. Tôi sẽ xem xét nếu tôi là bạn. Chắc chắn, có một số chi phí, nhưng mã hóa chống lại nó là vô cùng dễ dàng.

Tất nhiên, tôi không chắc nó sẽ mở rộng như thế nào nếu bạn phải truyền tải, hàng chục hoặc hàng nghìn megabyte dữ liệu qua các kết nối internet chậm. Nó cung cấp I/O không đồng bộ, nhưng tôi không nghĩ rằng bạn có thể nhận được một chỉ số tiến bộ, và có nhất định không phải là một chức năng tiếp tục.

Đã thêm: Bạn cũng có thể tiếp tục sử dụng ổ cắm của mình. Không có thêm công việc nào được yêu cầu để kết nối với máy chủ trên internet. Chỉ cần chỉ định địa chỉ IP của máy chủ, và bạn sẽ đi. Hệ điều hành của bạn sẽ xử lý tất cả các chi tiết đẫm máu như các bộ định tuyến, các gói bị thiếu, vv

3

Bạn có thể làm điều đó với lớp Socket của Net hoặc bạn có thể làm việc với lớp TcpClient thuận tiện hơn.

Trước hết, bạn cần phải tìm ra máy chủ nào bạn định liên lạc. Đây có phải là máy chủ HTTP hoặc máy chủ FTP không? Cả HTTP và FTP là các giao thức mức ứng dụng được triển khai trên các ổ cắm (sử dụng), đây thực sự là một giao diện tầng truyền tải.

Địa chỉ IP cục bộ của bạn hoặc địa chỉ của bộ định tuyến thực sự không quan trọng. Tuy nhiên bạn cần phải biết địa chỉ IP của máy chủ từ xa mà bạn định kết nối. Bạn có thể có được điều này bằng cách gọi:

IPHostEntry host; 

host = Dns.GetHostEntry(hostname); 

Bạn cũng có thể muốn suy nghĩ về các vấn đề khác khi làm việc với ổ cắm, chẳng hạn như sử dụng timeout để che dấu thất bại, khả năng khôi phục tải lên/tải khi chuyển các tập tin lớn, vv Nếu bạn dành thời gian tìm kiếm trên mạng, bạn sẽ có thể tìm thấy apis HTTP/FTP ở mức cao hơn sẽ cho phép bạn làm việc với việc chuyển tệp dễ dàng hơn nhiều.

Đánh giá bởi câu hỏi của bạn, bạn có vẻ khá mới để ổ cắm, vì vậy đọc this cũng có thể giúp

0

Trước tiên, bạn nên đưa ra quyết định gì giao thức bạn muốn sử dụng giao thức TCP hoặc UDP. Sau đó, bạn có hai lựa chọn: 1. sử dụng Socket (cấp thấp hơn) hoặc 2. Sử dụng lớp như TCPClient hoặc UDPClient (đại diện cho trừu tượng cao hơn một chút. Tôi muốn đề xuất (cho việc xin ăn tùy chọn thứ hai)

0

Điều gì bạn có muốn biết phụ thuộc rất nhiều vào nhiều nơi trên cơ sở hạ tầng của bạn.

Nếu bạn muốn gửi dữ liệu đến một máy chủ được minh bạch kết nối với internet, nó là dễ dàng như việc kết nối với nó là IP adress.

Nếu bạn muốn kết nối với một số người bạn với kết nối băng rộng, mọi thứ trở nên khó khăn. Bạn thường phải định cấu hình cả hai bộ định tuyến của mình (hoặc ít nhất là mục tiêu một) cho NAT.

Làm quen với NAT và kiến ​​thức cơ bản về định tuyến IP. Chi tiết bạn cung cấp không đủ để mô tả chính xác những gì bạn muốn làm.

10

Nếu tất cả những gì bạn muốn làm là chuyển dữ liệu thô từ máy này sang máy khác thì việc sử dụng ổ cắm TCP rất dễ dàng.

Đây là ví dụ nhanh.

Server:

ThreadPool.QueueUserWorkItem(StartTCPServer); 

private static void StartTCPServer(object state) { 
     TcpListener tcpServer = new TcpListener(IPAddress.Parse("192.168.1.15"), 5442); 
     tcpServer.Start(); 
     TcpClient client = tcpServer.AcceptTcpClient(); 

     Console.WriteLine("Client connection accepted from " + client.Client.RemoteEndPoint + "."); 

     StreamWriter sw = new StreamWriter("destination.txt"); 

     byte[] buffer = new byte[1500]; 
     int bytesRead = 1; 

     while (bytesRead > 0) { 
      bytesRead = client.GetStream().Read(buffer, 0, 1500); 

      if (bytesRead == 0) { 
       break; 
      } 

      sw.BaseStream.Write(buffer, 0, bytesRead); 
      Console.WriteLine(bytesRead + " written."); 
     } 

     sw.Close(); 
    } 

Chủ đầu tư:

StreamReader sr = new StreamReader("source.txt"); 

TcpClient tcpClient = new TcpClient(); 
tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.15"), 5442)); 

byte[] buffer = new byte[1500]; 
long bytesSent = 0; 

while (bytesSent < sr.BaseStream.Length) { 
     int bytesRead = sr.BaseStream.Read(buffer, 0, 1500); 
     tcpClient.GetStream().Write(buffer, 0, bytesRead); 
     Console.WriteLine(bytesRead + " bytes sent."); 

     bytesSent += bytesRead; 
    } 

    tcpClient.Close(); 

    Console.WriteLine("finished"); 
    Console.ReadLine(); 
8

Thông tin thêm về kết nối của bạn cần được yêu cầu để cung cấp cho bạn một giải pháp thích hợp. Có rất nhiều giao thức theo ý của bạn và có sự cân bằng cho tất cả chúng. Có thể bạn sẽ chọn một trong hai số này transport layers:

UDP - Đây là phương thức gửi và gửi gói. Tốt cho phương tiện truyền phát trực tuyến không nhất thiết phải chính xác 100%.

Ưu điểm:

  1. Không có kết nối cần thiết.
  2. Rất nhẹ.

Nhược điểm:

  1. Không bảo lãnh của gói tin của bạn đạt đến đích (mặc dù hầu hết thời gian họ làm cho nó).
  2. Các gói có thể ra khỏi thứ tự mà bạn đã gửi chúng.
  3. Không đảm bảo rằng nội dung của chúng giống như khi bạn gửi gói.

TCP - Đây là giao thức dựa trên kết nối đảm bảo hành vi có thể dự đoán được.

Ưu điểm:

  1. Bạn sẽ biết chắc chắn liệu các gói đã đạt đến đích hay không.
  2. Các gói sẽ đến theo thứ tự bạn đã gửi.
  3. Bạn được đảm bảo rằng 99,999999999% thời gian các gói tin của bạn sẽ đến với nội dung không bị thay đổi.
  4. Điều khiển luồng - nếu máy gửi gói đang gửi quá nhanh, máy nhận có thể điều chỉnh tốc độ gửi gói của người gửi.

Nhược điểm:

  1. Yêu cầu một kết nối được thiết lập.
  2. Chi phí cao hơn đáng kể so với UDP.

Danh sách ưu và khuyết điểm hoàn toàn không có nghĩa nhưng phải đủ thông tin để bạn có thể đưa ra quyết định sáng suốt. Nếu có thể, bạn nên tận dụng các giao thức dựa trên application layer đã tồn tại, chẳng hạn như HTTP nếu bạn đang chuyển văn bản ASCII, FTP nếu bạn đang chuyển tệp, v.v.

Các vấn đề liên quan