2011-07-13 54 views
2

要求是通過HTTP或FTP協議傳輸字節數據流(以字節格式)。我正在使用IP協議進行此操作,但無法由負載平衡器處理。現在我通過轉換爲字節格式發送數據流,並在接收端將其解碼爲字符串形式。我想用HTTP協議做同樣的事情。是否可以通過HTTP或FTP協議而不是TCP/IP傳輸數據流

Socket sock = new Socket(AddressFamily.InterNetwork, 
       SocketType.Stream, ProtocolType.IP); 

在這裏,在ProtocolType.IP應該有HTTP,但HTTP選項是不存在的。

這是一個WinForms應用程序。

+1

的Http依賴於TCP/IP –

回答

8

HTTP不是該級別的協議 - 它是應用級別的協議。

你不會得到「HTTP套接字」 - 你通常會得到一個TCP/IP套接字並在其上寫入HTTP數據。

有關涉及的網絡層的更多詳細信息,請參閱OSI model

我不確定.NET中的內置HTTP客戶端庫是否支持流請求......您可能需要關閉緩衝並寫入請求流。使用類似WireShark的內容查看套接字級別的外觀。

+0

這是我沒有考慮很基本的東西。謝謝喬恩。你可以建議任何方式來做負載平衡。我有一個模擬器正在流式傳輸數據。在接收器之前,我需要一個負載平衡器。我開始知道負載平衡器可以自動適用於HTTP,HTTPS,FTP,SMTP等標準協議,但不適用於TCP/IP協議。 –

+0

@Akki:你可以將數據拆分爲多個請求,而不是流式傳輸?這將使負載均衡更容易。 –

4

枚舉不包含HTTP。 HTTP是OSI模型中應用層的一部分。從來沒有一個「HTTP套接字」的概念。 HTTP封裝在TCP/IP中。枚舉參考傳輸協議。

MSDN on the ProtocolType enumeration

IP Internet Protocol. 
    IPv6HopByHopOptions  IPv6 Hop by Hop Options header. 
    Icmp Internet Control Message Protocol. 
    Igmp Internet Group Management Protocol. 
    Ggp  Gateway To Gateway Protocol. 
    IPv4 Internet Protocol version 4. 
    Tcp  Transmission Control Protocol. 
    Pup  PARC Universal Packet Protocol. 
    Udp  User Datagram Protocol. 
    Idp  Internet Datagram Protocol. 
    IPv6 Internet Protocol version 6 (IPv6). 
    IPv6RoutingHeader IPv6 Routing header. 
    IPv6FragmentHeader IPv6 Fragment header. 
    IPSecEncapsulatingSecurityPayload IPv6 Encapsulating Security Payload header. 
    IPSecAuthenticationHeader IPv6 Authentication header. For details, see RFC 2292 section 2.2.1, available at http://www.ietf.org. 
    IcmpV6 Internet Control Message Protocol for IPv6. 
    IPv6NoNextHeader IPv6 No next header. 
    IPv6DestinationOptions IPv6 Destination Options header. 
    ND Net Disk Protocol (unofficial). 
    Raw  Raw IP packet protocol. 
    Unspecified  Unspecified protocol. 
    Ipx  Internet Packet Exchange Protocol. 
    Spx  Sequenced Packet Exchange protocol. 
    SpxII Sequenced Packet Exchange version 2 protocol. 
    Unknown  Unknown protocol. 
1

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/7be22396-0f2a-4138-b47a-09d93894185b 的第一篇文章展示瞭如何通過一個HTTP請求發送一些字節。 適合您的使用:

byte[] data; 
// ... 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(server); 
request.ContentType = "application/octet-stream"; 
request.Method = "POST"; // I think, your data is too big for GET 
request.ContentLength = data.Length; 
try { 
    Stream postStream = request.GetRequestStream(); 
    postStream.Write(data, 0, data.Length); 
    postStream.Close(); 
} catch(Exception ex) { 
    throw new Exception(ex.Message); 
} 
+0

爲什麼人們在這裏下臺? – bdonlan

+0

我不知道,這正是線程啓動器想要的。 – marc

+0

爲什麼我想降低自己?這不是一個genuin問題嗎?我是IT領域的新手。我不認爲我問過任何錯誤。 –

相關問題