Socket套接字基本概念

       套接字是支持TCP/IP协议的路通信的基本操作单元,是对网络中不同主机上的应用进程之间进行双向通信端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。

        从所处地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口。

       套接字的类型:流式套接字;数据报套接字;原始套接字。

       套接字的作用:完成两个应用程序之间的数据传输。

       套接字的实质:两个网络各自通信连接中的端点。

       Socket是由IP地址和端口号结合的,提供向应用层进程传送数据包的机制。

       表示方法

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

       主要类型

       1.流套接字 SOCK_STREAM:

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

       2.数据报套接字 SOCK_DGRAM:

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

       3.原始套接字 SOCK_RAW:

               原始套接字和标准套接字(标准套接字指前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此要访问其他协议发送的数据必须使用原始套接字。

       工作流程

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

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

               1.服务器监听。

               2.客户端请求。

               3.连接确认。

       1.服务器监听

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

       2.客户端请求:

       所谓客户端请求是指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

       为此,客户端的套接字必须首先确认它要连接的服务器的套接字,指出服务器端套接字的端口号和地址,然后就向服务器端套接字提出连接请求。

       3.连接确认:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于网络编程中的socket套接字,它是一种用于在网络中进行通信的编程接口或抽象层。通过socket,我们可以建立客户端和服务器之间的连接,并进行双向的数据传输。 在网络编程中,通常使用TCPUDP两种协议来进行数据传输。TCP(Transmission Control Protocol)是一种可靠的、面向连接的协议,它提供了稳定的数据传输和错误恢复机制。而UDP(User Datagram Protocol)是一种不可靠的、无连接的协议,它更适合实时性要求较高的数据传输。 在使用socket进行网络编程时,通常需要以下步骤: 1. 创建socket:使用socket()函数创建一个新的socket对象。 2. 绑定socket:对于服务器端,需要使用bind()函数将socket绑定到一个特定的IP地址端口号上。对于客户端,通常可以省略这一步。 3. 监听连接(仅适用于服务器):对于服务器端,可以使用listen()函数开始监听传入的连接请求。 4. 接受连接(仅适用于服务器):使用accept()函数接受客户端的连接请求,并返回一个新的socket对象,用于与该客户端进行通信。 5. 发送和接收数据:使用send()函数发送数据,使用recv()函数接收数据。 6. 关闭socket:使用close()函数关闭socket连接。 需要注意的是,网络编程中的socket可以是阻塞的或非阻塞的。在阻塞模式下,程序会一直等待,直到某个操作完成或超时。而在非阻塞模式下,程序会立即返回,并且可以继续执行其他操作。 这只是网络编程中socket套接字基本概念和使用方法的简单介绍,如果你有更具体的问题,我可以帮你更详细地解答。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值