Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets socket编程与Http编程的区别_Sockets_Network Programming - Fatal编程技术网

Sockets socket编程与Http编程的区别

Sockets socket编程与Http编程的区别,sockets,network-programming,Sockets,Network Programming,套接字编程和Http编程有什么区别?有人能帮忙吗?对于HTTP,您使用高级HTTP协议(在套接字上工作)。它是无会话的,这意味着您发送文本请求,如GET google.com,并在连接关闭后接收文本或二进制数据(在HTTP 1.1中,持久连接可用) MSDN示例: public static void Main (string[] args) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);

套接字编程和Http编程有什么区别?有人能帮忙吗?

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

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

如果你感兴趣的话,你可以阅读更多关于

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


这意味着,如果您想使用TCP,就要使用套接字。但是您也可以使用套接字使用HTTP进行通信,但是您必须根据HTTP规范()对消息进行解码/编码。由于这对大多数开发人员来说都是一项艰巨的任务,我们在开发人员框架(如.NET)中也有现成的客户机,例如
WebClient
HttpWebRequest
类。

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

HTTP连接

  • HTTP连接是在套接字上运行的协议
  • HTTP连接是网络连接的更高级抽象
  • 通过HTTP连接,实现将处理所有这些更高级别的细节,并只发送HTTP请求(某些头) 并从服务器接收HTTP响应
插座连接

  • 套接字用于在系统之间传输数据。它只是将两个系统连接在一起,IP地址是 机器通过基于IP的网络
  • 通过套接字连接,您可以为两个系统之间的网络连接设计自己的协议
  • 使用套接字连接时,您需要注意TCP/IP连接的所有低级细节

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

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

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


现在在socket编程中,您可以创建一个套接字,将其绑定到ip地址和端口号,作为端口号,并告诉它遵循http、ssh、,ftp或基于您希望使用套接字进行的通信的任何内容。

连接未从HTTP 1.1关闭。@EJP:取决于
连接头的设置方式;)@完全正确。它不是随意关闭的。没错,但这就是OP将发现的细节,以及关于这个主题的其他95%的信息。你所说的语言是什么意思?java应用程序可以通过套接字与Python应用程序通信。例如,我认为他的意思是,通常,如果你想连接松散耦合(或完全不同)的系统,HTTP是有用的:使用某种技术构建的前端,使用另一种技术构建的后端,通过URL访问web上的资源。然而,通常如果您使用较低级别的连接协议,如TCP/UDP,则可能是在与具有类似技术的系统(例如,不同的Java应用程序)进行通信。是这样吗?我自己也在试着理解它。所以两者都使用TCP,只是HTTP以预定义的格式响应,套接字提供从套接字另一端返回的数据,对吗?是的。TCP确保所有内容都到达(传输层),HTTP告诉web应用程序应该做什么。