网络编程套接字

介绍

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

相关推荐
墨风如雪3 小时前
甲骨文云(Oracle Cloud)最新注册防坑记录:被ABC了怎么办?
服务器
xingfujie4 小时前
运维实战攻略
运维
道清茗4 小时前
【RH294知识点汇总】第 9 章 《 自动执行 Linux 管理任务 》常见问题
linux·运维·服务器
北方的流星5 小时前
华三路由器NAT配置
运维·网络·华三
wj3055853785 小时前
Codex + Git 开发环境配置指南(WSL版)
linux·运维·git
数据法师6 小时前
开源情报收集工具GhostTrack深度测评:IP、手机号、用户名的合规信息查询方案
网络·网络协议·tcp/ip
星马梦缘6 小时前
如何切换window-ubuntu双系统【方案二】
linux·运维·ubuntu
2501_927283586 小时前
荣联汇智助力天津艺虹打造“软硬一体”智慧工厂,全流程自动化引领印刷包装行业数智变革
大数据·运维·数据仓库·人工智能·低代码·自动化
HXDGCL7 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
丑八怪大丑7 小时前
Java网络编程
linux·服务器·网络