网络编程套接字

介绍

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

相关推荐
二等饼干~za8986682 小时前
源码可控:云罗 GEO 源头工厂,开源搭建 + 二次开发全链路解决方案
服务器·开发语言·开源·php·音视频·ai-native
@insist1232 小时前
网络工程师-网络安全基础体系:软考核心考点与合规框架全解析
网络·网络工程师·软考·软件水平考试
zhanghongbin012 小时前
本地持久化:网络故障数据保护
服务器·网络·php
刘~浪地球2 小时前
数据库与缓存--分库分表实战指南
网络·数据库·缓存
funnycoffee1232 小时前
华为USG防火墙的HRP逃逸是什么机制?
运维·服务器·网络·华为usg
念恒123063 小时前
Linux初识
linux·服务器·c++
开开心心就好3 小时前
能把网页藏在Word里的实用摸鱼工具
linux·运维·服务器·windows·随机森林·逻辑回归·excel
Bruce_Liuxiaowei3 小时前
技嘉Aorus主板Win10引导故障深度修复:从网络重置到注册表移植
服务器·网络·windows·microsoft
@insist1233 小时前
网络工程师-网络攻击类型识别与防御体系:软考网络工程师核心考点
网络·网络工程师·软考·软件水平考试