套接字编程和HTTP编程有什么区别?可以有人帮忙吗?
HTTP是一种应用协议。这基本上意味着HTTP本身不能用于将信息传输到/从远程端点。相反,它依赖于一个底层协议,而在HTTP的情况下就是TCP。
如果您对OSI层级感兴趣,可以了解更多相关信息。
另一方面,套接字是大多数操作系统提供的API,用于与网络通信。套接字API支持来自传输层及以下的不同协议。
这意味着,如果您想使用TCP,则要使用套接字。但是,您也可以使用套接字来使用HTTP进行通信,但是您必须根据HTTP规范(RFC2616)解码/编码消息。由于这对于大多数开发人员来说可能是一个巨大的任务,因此我们还在开发框架中准备了就绪的客户端,例如WebClient
或HttpWebRequest
类。
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});
Connection
е§іжШѓе¶ВдљХиЃЊзљЃзЪД ;) - jgauffinHTTP连接
- HTTP连接是在套接字上运行的协议。
- HTTP连接是网络连接的更高级抽象。
- 使用HTTP连接,实现会处理所有这些更高级别的细节,并简单地发送HTTP请求(一些头信息)并从服务器接收HTTP响应。
套接字连接
- 套接字用于在系统之间传输数据。它只是将两个系统连接在一起,IP地址是基于IP的网络上机器的地址。
- 使用套接字连接,您可以为两个系统之间的网络连接设计自己的协议。
- 使用套接字连接,您需要处理TCP/IP连接的所有低级细节。
Socket编程是一种中间件,位于应用程序层和TCP层之间。它能够承载应用程序层中的任何内容,甚至包括HTTP数据。