【网络通信原理之套接字】

2023-12-14 00:06:24

目录

概念

分类

数据报套接字:使用传输层UDP协议

流套接字:使用传输层TCP协议 ?

原始套接字

Socket编程注意事项 ?


前言:本文主要介绍了在什么是套接字及在Java中套接字是什么,和在套接字编程的注意事项。

概念

Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元基于Socket套接字的网络程序开发就是网络编程。简单来说, 要想进行网络通信, 就需要有Socket文件这样的对象。

借助这个Socket文件对象

  • 往这个Socket对象中写入数据, 相当于通过网卡发送消息
  • 从这个Socket对象中读入数据, 相当于通过网卡接受消息,才能间接的操作网卡。

分类

Socket套接字主要针对传输层协议划分为如下三类:

数据报套接字:使用传输层UDP协议

UDP,即User Datagram Protocol(用户数据报协议),传输层协议。
以下为UDP的特点(细节后续再学习):

  • 无连接
  • 不可靠传输
  • 面向数据报
  • 有接收缓冲区,无发送缓冲区
  • 大小受限:一次最多传输64k

对于数据报来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如1000个字节,
必须一次发送,接收也必须一次接收1000个字节,而不能分1000次,每次接收1个字节。 ? ?

下面介绍Java数据报套接字通信模型,对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报
Java中使用UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使用DatagramPacket 作为发送或接收的UDP数据报。对于一次发送及接收UDP数据报的流程如下: ?

以上只是一次发送端的UDP数据报发送,及接收端的数据报接收,并没有返回的数据。也就是只有请求,没有响应对于一个服务端来说,重要的是提供多个客户端的请求处理及响应,流程如下:??

流套接字:使用传输层TCP协议 ?

TCP,即Transmission Control Protocol(传输控制协议),传输层协议。
以下为TCP的特点(细节后续再学习):

  • 有连接
  • 可靠传输
  • 面向字节流
  • 有接收缓冲区,也有发送缓冲区
  • 大小不限

对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收.

下面介绍Java流套接字通信模型,如下图所示:

原始套接字

原始套接字用于自定义传输层协议,用于读写内核没有处理的IP协议数据。简单了解即可。 ?

Socket编程注意事项 ?

1. 客户端和服务端:开发时,经常是基于一个主机开启两个进程作为客户端和服务端,但真实的场景,一般都是不同主机。

2. 注意目的IP和目的端口号,标识了一次数据传输时要发送数据的终点主机和进程

3. Socket编程我们是使用流套接字数据报套接字,基于传输层的TCP或UDP协议,但应用层协议,也需要考虑,这块我们在后续来说明如何设计应用层协议。

4. 关于端口被占用的问题
如果一个进程A已经绑定了一个端口,再启动一个进程B绑定该端口,就会报错,这种情况也叫端
口被占用。对于java进程来说,端口被占用的常见报错信息如下: ?

此时需要检查进程B绑定的是哪个端口,再查看该端口被哪个进程占用。
以下为通过端口号查进程的方式: ?
1.在cmd输入 netstat -ano | findstr 端口号 ,则可以显示对应进程的pid。

2.在任务管理器中,通过pid查找进程

解决端口被占用的问题: ?
如果占用端口的进程A不需要运行,就可以关闭A后,再启动需要绑定该端口的进程B
如果需要运行A进程,则可以修改进程B的绑定端口,换为其他没有使用的端口。 ?

文章来源:https://blog.csdn.net/TheMyth142857/article/details/134983311
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。