HTTP和Socket连接区别

一、OSI模型(Open System Interconnection Reference Model, 网络七层):
分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
其中底层三层:物理层、数据链路层、网络层是网络工程师研究的对象,
而其它四层,是用户面向和关心的问题。
http协议:超文本传输协议, 对应于应用层.
tcp协议:传输控制协议,对应于传输层.
ip协议:对应于网络层.
TCP/IP是传输层协议,主要解决数据在网络中的传输。Http是应用层的协议,用于如何封装数据。传输数据的时候,只使用TCP/IP协议(传输层)。如果没有应用层来识别数据内容,传输后的协议都是无用的。
应用层协议很多FTP、HTTP、TELNET等,可以自己定义应用层协议。WEB使用HTTP作传输层协议。以封装HTTP文本信息,然后使用TCP/IP做传输层协议,将数据发送到网络上。
Web 使用 HTTP 作传输层协议,以封装 HTTP 文本信息,然后使用 TCP/IP 做传输层协议,将数据发送到网络上。
Socket是对TCP/IP协议的封装,Socket只是个接口,不是协议,通过Socket,我们才能使用TCP/IP协议。除了TCP,也可以使用UDP协议来传递数据.

二、 HTTP和Socket连接区别
1、 TCP连接
要想明白Socket,必须要理解TCP连接,建立TCP连接的"三次握手":
第一次:客户端向服务器发送SYN包(syn=j),同时自己处于SYN_SEND状态。
第二次:服务器端收到SYN包后。必须确认客户的SYN(syn=j+1)。同时也发送一个SYN包(syn=k)。即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次:客户端收到服务器发来的SYN+ACK包,就向服务器发送SYN(syn=k+1),发送完毕后,服务器和客户端都进入ESTABLISHED状态。完成三次握手。
握手过程中,并不传输数据。在握手后,服务器与客户端才开始传输数据,理想状态下,TCP连接一旦建立,在通讯双方中的任何一方主动断开连接之前,TCP连接会一直保持下去。
2、 HTTP连接
HTTP最显著的特点,客户端发送请求都需要服务器端回送响应。请求结束后,主动释放链接。HTTP是一种短连接,通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。
3、 Socket连接
Socket连接,至少需要一对套接字,分为clientSocket,serverSocket。连接分为3个步骤:
服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态。
客户端请求:客户端的套接字要描述它要连接的服务器的套接字。提供地址和端口号,然后向服务器套接字提出连接请求。
连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端,一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
4、 Socket连接与TCP连接
创建Socket连接的时候,可以指定传输层协议。可以是TCP或者UDP,当用TCP连接,该Socket就是个TCP连接。
5、 Socket连接与HTTP连接
通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速网络,该节点处于活跃状态。HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。由于实际很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步。若双方是Socket连接,可以由服务器直接向客户端发送数据。若双方是HTTP连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。因此客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。

6、server socket例子:

Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint point = new IPEndPoint(ip, 30000);
serverSocket.Bind(point);//socket绑定监听地址
Console.WriteLine("Listen Success");
serverSocket.Listen(10);//设置同时连接个数

//利用线程后台执行监听,否则程序会假死
Thread thread = new Thread(Listen);
thread.IsBackground = true;
thread.Start(serverSocket);

Console.Read();

7、http的get和post请求

#pragma strict
privatevar url : String = "127.0.0.1/login.php?user=username&pwd=123456";
function Start () {
     var getData : WWW = WWW(url);
     yield getData;     
     if(getData.error != null) {
          Debug.Log(getData.error);
     }
     else {
          Debug.Log(getData.text);
     }
}
#pragma strict
privatevar url : String = "127.0.0.1/login.php";
function Start () {
     var form : WWWForm = new WWWForm();
     form.AddField("user", "username");
     form.AddField("pwd", "123456");
     var getData : WWW = WWW(url, form);
     yield getData;
     if(getData.error != null) {
          Debug.Log(getData.error);
     }
     else {
          Debug.Log(getData.text);
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值