是否有可能通过HTTP或FTP协议而不是TCP/IP传输数据流?



要求通过HTTP或FTP协议传输字节数据流(以字节格式)。我正在做它与IP协议,但因为它是无法由负载均衡器处理。现在我通过转换成字节格式发送数据流,并在接收端解码成字符串形式。HTTP协议也是这样

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

ProtocolType.IP这里应该有HTTP,但是HTTP选项没有。

这是一个WinForms应用程序

HTTP不是那个级别的协议-它是应用级别的协议。

你不会得到"一个HTTP套接字"——你通常会得到一个TCP/IP套接字,并在上面写HTTP数据。

有关所涉及的网络层的更多细节,请参阅OSI模型。

我不确定。net中内置的HTTP客户端库是否支持流请求…您可能希望关闭缓冲并写入请求流。看看在套接字级别使用类似WireShark的东西是什么样子的。

ProtocolType枚举不包括HTTP。HTTP是OSI模型中应用层的一部分。从来就没有"HTTP套接字"的概念。HTTP封装在TCP/IP中。ProtocolType枚举指传输协议。

来自MSDN上的协议类型枚举,

    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.

看http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/7be22396-0f2a-4138-b47a-09d93894185b第一篇文章展示了如何通过HTTP-Request发送一些字节。适合您使用:

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);
}

最新更新