QT:TCPsocket

        什么是socket

      Socket是套接字,所谓套接字就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。套接字上联应用进程,下联网络协议栈,是应用程序通过网络进行通信的接口,是应用程序域网络协议根进行交互的接口。

        套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内以及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。

        Socket可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的Socket中,使对方能够接受到这段信息。Socket是有IP地址和端口结合的,提供向应用层进程传送数据包的机制。

表示方法:

        套接字Socket = (IP地址:端口号),套接字的表示方法是点分十进制的IP地址后面写上端口号,中间用冒号或都好隔开。每一个传输层连接唯一的被通信两端的两个端点(即两个套接字)所确定。例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23) 。

主要类型:

        1、流套接字(SOCK_STREAM)

        流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送、并按顺序接受。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

        2、数据报套接字(SOCK_DGRAM)

        数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。

        3、原始套接字(SOCK_RAW)

        原始套接字与标准套接字(标准套接字指上述两种套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字智能读取TCP协议的数据,数据报套接字智能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接字。

工作流程:

        要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,称为 Client Socket,另一个运行于服务器端,称为 Server Socket。

        根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤   

        (1)服务器监听。

        (2)客户端请求。

        (3)连接确认  。

        1.服务器监听

        所谓服务器监听,是指服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

        2.客户端请求

        所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端接字提出连接请求   。

        3.连接确认

        所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,就会响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述发送给客户端。一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接收其他客户端套接字的连接请求。

主要特点:

        根据套接字的不同类型,可以将套接字调用分为面向连接服务和无连接服务。

        面向连接服务的主要特点如下:

        (1)数据传输过程必须经过建立连接、维护连接和释放连接3个阶段;

        (2)在传输过程中,各分组不需要携带目的主机的地址;

        (3)可靠性好,但由于协议复杂,通信效率不高。

        面向无连接服务的主要特点如下:

        (1)不需要连接的各个阶段;

        (2)每个分组都携带完整的目的主机地址,在系统中独立传送;

        (3)由于没有顺序控制,所以接收方的分组可能出现乱序、重复和丢失现象;

        (4)通信效率高,但可靠性不能确保。

以上原文来自:套接字_百度百科 (baidu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值