网络编程套接字

介绍

应用层将应用层数据包给到传输层,那么是如何给到传输层的,利用传输层提供的函数,就是网络编程套接字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

相关推荐
木子欢儿1 小时前
国内 macOS/Linux 安装 rust
linux·运维·服务器·macos·rust
say_fall2 小时前
【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口
linux·网络·tcp/ip·计算机网络·信息与通信
迪菲赫尔曼2 小时前
【基础篇 26】第一次在服务器完成训练:准备数据、断线继续、检查成果与备份
运维·服务器·人工智能·机器学习·计算机视觉
进击的荆棘2 小时前
Linux系统——线程同步与互斥
linux·运维·服务器·策略模式·同步·互斥·posix
.道阻且长.2 小时前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
vipxieliang2 小时前
可观测性与安全的融合:统一数据平台的建设实践
运维·openai·自动化运维
Joy T2 小时前
Gzip 压缩原理与实践:HTTP 响应压缩、性能收益与工程配置
网络·网络协议·http
叼烟扛炮2 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
Android系统攻城狮3 小时前
Linux FFmpeg深度解析之av_guess_format调用流程与实战(三十六)
linux·运维·服务器·ffmpeg·ffmpeg音视频进阶
进击的荆棘3 小时前
Linux系统——线程概念与控制之线程封装
linux·运维·服务器·线程