网络编程套接字

介绍

应用层将应用层数据包给到传输层,那么是如何给到传输层的,利用传输层提供的函数,就是网络编程套接字socket,此处的函数是一组函数

传输层主要涉及到了两组协议,分别是UDP协议,TCP协议,那么传输层就提供了两组socket函数

UDP和TCP

UDP和TCP特性

TCP:有连接,可靠传输,面向字节流,全双工

UDP:无连接,不可靠传输,面向数据报,全双工

连接:抽象的连接,网络连接,TCP需要在通信之前要保存双方的关键信息在进行发消息UDP不需要直接发送消息即可

可靠传输:TCP尽量对抗丢包,尽可能把数据报传输给对方,即使不能100%传输到但也知道数据报是否传输给了对方,UDP则不考虑丢包

面向字节流:读写和文件类似

面向数据报:每次读写以一个UDP数据报为单位进行

全双工:一个通信可以进行双向传输

半双工:一个通信进行单向传输

UDP

DatagramSocket

是一个socket对象,socket对象是对网卡这个设备的抽象,这个socket对象就可以操控网卡

socket目前看来有两种含义:1对网络传输中传输层的API

2.对网卡的抽象,socket相当于一种特殊的文件,之前看来文件是对硬盘的抽象,但操作系统中文件也可以是一个广义的概念,他可以对控制台/网卡/硬盘以文件进行表示,对网卡封装为socket文件,Java中又封装为socket对象

DatagramPacket

是UDP数据传输中的基本单位

网络编程追求的是跨主机

TCP

SeverSocket

给服务器使用,负责把连接到服务器的客户端进行统一处理

Socket

既给服务器使用,也给客户端使用,对客户端进行具体的操作(进行读写操作)

一个端口只能被一个进程关联,可以通过控制台输入++"netstat -ano"++查看哪些端口被进程使用

三个核心问题:

客户端输入没有响应服务器没有请求

在UDP的服务器和客户端都写好之后,从客户端输入但没有响应服务区也没有收到请求,是应为缓冲区,在进行IO的过程中,无论是操作硬盘,网卡还是打印机与内存相比都是低效操作,那么为了更加高效,就会减少操作IO设备的次数,尽量一次传输较多的数据,就会有缓冲区,缓冲区本身就是内存,写入IO设备的数据不会直接写入,先传输到缓冲区,然后当达到一定数量时,就会写入到IO设备,PrintWriter带有缓冲区这个功能,使用fiush方法可以冲刷缓冲区,即使没有写满但也可以真正写入

文件资源泄露

每次客户端连接服务器的时候就会创建一个socket对象就会占用1文件描述符表的一个位置

一个服务器不能为多个客户端提供服务

如果线程创建过多也会影响效率那么就可以使用线程池

IO多路复用一个线程处理多个socket对象

在TCP代码中有一个隐含条件,请求和响应都是以\n结尾的,面向字节流,传输100个字节有很多种方式,的那如果不知道有传输多少字节才会是一个请求结束呢,就需要有\n

相关推荐
星野川崎20610 分钟前
电商多店运维:云机长期挂机频繁掉线、账号无故风控原因剖析与解决方案
大数据·运维·云计算·电商
IT邦德2 小时前
Dify1.6基于ubuntu系统的部署实战
linux·运维·ubuntu
非凡ghost3 小时前
分区助手:Windows 磁盘管理的“瑞士军刀“,分区调整不再怕丢数据
服务器·windows·电脑·软件需求
蓝速科技3 小时前
蓝速科技会议电子门牌规模化部署与运维成本实测
运维·科技
许彰午3 小时前
# allbytaskid——一个接口扛六个DataStore
运维·服务器·php
吠品3 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
牛奶咖啡133 小时前
AI助力运维——AIGC运维应用实践—Deepseek的介绍与本地部署选型
运维·人工智能·deepseek·deepseek能做什么·deepseek本地部署配置·本地部署选型避坑原则·本地部署的典型方案
木白CPP4 小时前
Linux 驱动UART子系统源码分析
linux·运维·服务器·驱动开发·嵌入式硬件·开源软件
-今昭-4 小时前
HAProxy 负载均衡部署
运维·负载均衡
RisunJan4 小时前
Linux命令-times(进程累计时间显示)
linux·运维·chrome