【网络协议-3】Socket

本文详细介绍了Socket的概念,包括流式套接字、数据报套接字和原始套接字的不同特性及应用场景,以及如何通过Socket API创建不同类型的套接字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Socket(套接字):

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),Socket只是为了更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,提供给我们一些最基本的函数接口。

  • 流式套接字(SOCK_STREAM):

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

  • 数据报套接字(SOCK_DGRAM):

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

  • 原始套接字(SOCK_RAW):

原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW


常用函数:

创建Socket实例:

  public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType); 

  • addressFamily 参数指定 Socket 使用的寻址方案
  • socketType 参数指定 Socket 的类型
  • protocolType 参数指定 Socket 使用的协议 

例如创建TCP和UDP套接字:

  Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
  Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值