套接字编程和Http编程的区别

套接字编程和Http编程有什么区别? 任何人都可以帮忙吗?

HTTP是一个应用程序协议。 这基本上意味着HTTP本身不能用于将信息传输到远程端点或从远端端点传输信息。 相反,它依赖于一个底层的协议,在HTTP的情况下是TCP。

在这里输入图像说明

如果您有兴趣,可以阅读更多关于OSI图层的信息 。

另一方面,套接字是大多数操作系统提供的能够与networking通信的API。 套接字API支持传输层和下层的不同协议。

这意味着如果你想使用TCP,你可以使用套接字。 但是您也可以使用套接字来使用HTTP进行通信,但是您必须根据HTTP规范( RFC2616 )对消息进行解码/编码。 因为对于大多数开发人员来说,这可能是一个巨大的任务,所以我们也在我们的开发框架(如.NET)中准备好了客户端,例如WebClientHttpWebRequest类。

使用HTTP,您可以使用高级HTTP协议(在套接字上运行)。 这是会话较less,这意味着您发送文本请求,如GET google.com和接收文本或二进制数据作为回报,连接closures后(在HTTP 1.1持久连接可用)

MSDN示例:

 public static void Main (string[] args) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]); HttpWebResponse response = (HttpWebResponse)request.GetResponse (); Console.WriteLine ("Content length is {0}", response.ContentLength); Console.WriteLine ("Content type is {0}", response.ContentType); // Get the stream associated with the response. Stream receiveStream = response.GetResponseStream (); // Pipes the stream to a higher level stream reader with the required encoding format. StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8); Console.WriteLine ("Response stream received."); Console.WriteLine (readStream.ReadToEnd ()); response.Close (); readStream.Close (); } 

使用套接字,您可以在较低级别上实际控制连接并发送/接收原始字节。

例:

 var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345); var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Connect(remoteEndpoint); socket.Send(new byte[] {1, 2, 3, 4}); 

HTTP编程或HTTP请求用于松散耦合和平台中立的语言技术通信,其中当使用套接字编程时系统具有语言规范协议