131

socket编程和Http编程有什么区别?有人可以帮忙吗?

4

6 回答 6

126

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

在此处输入图像描述

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

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

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

于 2013-02-27T10:48:33.253 回答
30

使用 HTTP,您可以使用高级 HTTP 协议(​​在套接字之上工作)。它是无会话的,这意味着您GET google.com在连接关闭后发送文本请求并接收文本或二进制数据作为回报(在 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});
于 2013-02-27T09:18:00.223 回答
21

HTTP 连接

  • HTTP 连接是在套接字上运行的协议。
  • HTTP 连接是网络连接的更高层次的抽象。
  • 使用 HTTP 连接,实现会处理所有这些更高级别的细节,只需发送 HTTP 请求(一些标头信息)并从服务器接收 HTTP 响应。

插座连接

  • 套接字用于在系统之间传输数据。它只是将两个系统连接在一起,IP 地址是机器在基于 IP 的网络上的地址。
  • 使用套接字连接,您可以为两个系统之间的网络连接设计自己的协议。
  • 使用 Socket 连接,您需要处理 TCP/IP 连接的所有底层细节。
于 2017-12-04T16:31:20.060 回答
2

为了使两个端点能够相互通信,它们都应该遵循一组规则。在计算机中,这些规则集称为协议。

例如,对于像浏览器这样的端点和像 Web 服务器这样的端点,它们都应该遵循一组称为 http 的规则或协议,以便能够通信和交易信息。所以在万维网和这种通信中,只有那些基于这个http协议的人才能成功地相互交谈。

套接字只是一个端点。它可以遵循 http 协议作为请求页面的客户端在 www 中进行通信,也可以充当侦听连接的服务器。或者它可以遵循另一组规则或协议,如 ssh、ftp 并以其他方式进行通信。

现在在套接字编程中,您可以创建一个套接字,将其绑定到一个 IP 地址和一个端口号以充当端口号,并根据您想要使用的通信告诉它遵循 http、ssh、ftp 或您想要的任何内容插座为。

于 2020-06-23T07:42:48.117 回答
1

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

于 2014-11-13T05:42:22.010 回答
0

Socket编程是一种中间件,位于应用层和TCP层之间。它能够承载应用层中存在的任何东西;甚至是 HTTP 数据。

于 2022-02-12T17:18:10.417 回答