网络编程套接字

介绍

应用层将应用层数据包给到传输层,那么是如何给到传输层的,利用传输层提供的函数,就是网络编程套接字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 小时前
DNS 通俗讲解:域名 ↔ IP 翻译
网络·网络协议·tcp/ip
青禾8372 小时前
Linux 操作系统入门指南:从目录结构到常用命令
linux·运维·服务器
zhengqweasd2 小时前
流量没跑满、带宽空闲,业务依然卡顿
运维·服务器·网络
liyuanchao_blog3 小时前
OVN/OVS场景下虚拟机新网卡通过 DHCP 获取 IP 地址的完整过程
网络·网络协议·tcp/ip·云计算
今天AI了吗3 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
M哥支付3 小时前
高频交易优选方案:银联快捷支付通道
服务器·网络·其他·微信·金融
爱倒腾的老唐3 小时前
11、误码率测试仪
网络
逍遥~1424 小时前
什么是工业级算力?算盘科技的核心能力解析
网络·人工智能·科技
Y3815326624 小时前
Docker Compose 服务依赖与健康检查:healthcheck 让容器按正确顺序启动
运维·docker·容器
稳联技术老娜4 小时前
伺服内嵌EtherNet IP方案:嵌入式小板SPI通讯固件Demo程序适配改造
运维·服务器·网络