韩顺平Java | C21网络编程

1 网络的相关概念

ip地址的组成:网络地址+ 主机地址
在这里插入图片描述
A类:0 ~ 2^7-1 = 0 ~ 127
B类:128 ~ 128+2^6-1 = 128 ~ 191
C类:192 ~ 192+2^5-1 = 192 ~ 223
D类:224 ~ 224+2^4-1 = 224 ~ 239
E类:240 ~ 240+2^3-1 = 240 ~ 247

端口号:在网络开发中,不要使用0~1024的端口,名花有主
常见的网络程序端口号:ssh: 22, ftp: 21, smtp: 25, http: 80, https: 443, tomcat: 8080, mysql: 3306, oracle: 1521, sqlserver: 1433

网络通讯协议TCP/IP(Transmission Control Protocol/Internet Procotol)传输控制协议/因特网互联协议
在这里插入图片描述
TCP&UDP
TCP:需要先建立三次握手,可靠,传输大量数据,完成需要释放连接,消息低
UDP:不需要建立连接,不可靠,不适合传输大量数据,速度快

2 网络编程

InetAddress类的使用

getLocalHost() //获取本机InetAddress对象getLocalHost
getByName() //根据指定主机名/域名获取ip地址对象
getHostName() //获取InetAddress对象的主机名
getAddress() //获取InetAddress对象的地址

Socket

Socket套接字(TCP/UDP编程)是两台机器通信的端点,网络通信实际就是Socket间的通信
当我们需要通讯时(读写数据) socket.getOutputStream() socket.getInputStream()

应用 编写服务端和客户端交互

1 编写一个服务端(9999端口监听),一个客户端
2 客户端连接到服务端,发送"hello, server",并接收到服务器端返回的"hello, client",再退出
(写完要使用socket.shutdownOutput()设置结束标记)
3 服务端接收客户端发送的信息,并发送"hello, client",再退出

//编写服务端
//1 创建服务端监听9999,要求本机没有其他服务监听统一端口
ServerSocket serverSocket = new ServerSocket(9999);
//如果没有客户端连接该端口,程序会阻塞,等待连接
System.out.print("服务器,在9999端口监听,等待连接...");
//2 如果有客户端连接,则返回Socket对象,程序继续
Socket socket = serverSocket.accept();
// ServerSocket可以通过accept()返回多个Socket[多个客户端连接服务器的并发]
System.out.println("服务端socket =" + socket.getClass());//3 通过socket.getInputStream()读取客户端写入到数据通道的数据,显示
InputStream inputStream = socket.getInputStream();
//4.1 IO读取,使用字节流
byte[] buf = new byte[1024];
int readLen = 0;
while((readLen = inputStream.read()) != -1) {System.out.print(new String(buf, 0, readLen));
}
//4.2 IO读取,使用字符流
String s;
BuffereadReader bufferReader = new BufferedReader(new InputStreamReader(inputStream)); // 用InputStreamReader将inputStream转成字符流
while((s = bufferedReader.readLine()) != null) {System.out.prinln(s);
}
//5 获取socket相关的输出流
OutputStream outputStream = socket.getOutputStream();
//5.1 IO写,使用字节流
outputStream.write("hello,client".getBytes());
//5.2 IO读,使用字符流
BufferedWriter bufferWriter = new BufferWriter(new OutputStreamWriter(outputStream));
bufferWriter.write("hello,client");
bufferWriter.newLine();
bufferWriter.flush();//设置结束标记
socket.shutdownOutput();
//6 关闭流和socket
inputStream.close();
socket.close();
serverSocket.close();//编写客户端
//1 创建客户端socket连接服务端
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.print("客户端socket返回=" + socket.getClass);
//2 通过socket.getOutputStream()得到和socket关联的输出流对象
OutputStream outputStream = socket.getOutputStream();
//3.1 IO写入,使用字节流
OutputStream.write("hello, server".getBytes());
//3.2 IO写入,使用字符流
BufferWriter bufferWriter = new BufferWriter(new OutputStreamWriter(outputStream));
bufferWriter.write("hello, server");
bufferWriter.newLine();
bufferWrite.flush();
//设置结束标志
socket.shutdownOutput();
//4.1 获取和socket相关的输入流,读取数据(字节)并显示
byte[] buf = new byte[1024];
int readLen = 0;
InputStream inputStream = socket.getInputStream();
while((readLen = inputStream.read(buf))) != -1) {System.out.print(buf, 0, readLen);
}
//4.2 获取和socket相关的输入流,读取数据(字符)并显示
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
System.out.println(bufferedReader.readLine);
//5 关闭流对象和socket
outputStream.close();
socket.close();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react-router v6的Link组件relative属性解释

Link组件有一个名为relative的属性,值为route或path,默认为route 当Link的to为两个点时,配置relativeroute|path会有不同的效果, 之前由于路径嵌套不够深,看不出区别,于是尝试加深路径,一眼就看出了区别 官方解释 | React Router6 中文文档 下方代码请看根路径/cd及其二级路…

爱上数据结构:顺序表和链表

一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条…

Linux第84步_了解Linux中断及其函数

1、中断号 中断号又称中断线&#xff0c;每个中断都有一个中断号&#xff0c;通过中断号即可区分不同的中断。 2、Linux中断API函数 需要包含头文件“#include <linux/interrupt.h>” 1)、在使用某个中断功能的时候&#xff0c;需要执行“申请中断” int request_irq(…

java注解的实现原理

首先我们常用的注解是通过元注解去编写的&#xff0c; 比如&#xff1a; 元注解有Target 用来限定目标注解所能标注的java结构&#xff0c;比如标注方法&#xff0c;标注类&#xff1b; Retention则用来标注当前注解的生命周期&#xff1b;比如source&#xff0c;class&…

Django(四)-搭建第一个应用(3)

一、问题详情页 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>展示某个投票的问题和不带结果的选项列表</title> </head> <body><form action"{% url polls:vote questi…

2024最全的Sora学习资料合集

2024最全的Sora学习资料合集&#xff0c;共5专题、30份资料。 点击前往星球下载地址&#xff08;文末领取优惠券&#xff09;&#xff1a;https://t.zsxq.com/186rJ8iZL 1、Sora专属提示词库 2、Sora专属教程 3、Sora学习文章 4、Sora提示词技巧 5、Sora-AI视频全网最全收集(…

idea默认代码生成脚本修改

修改了下idea自带的代码生成脚本&#xff0c;增加了脚本代码的注释&#xff0c;生成了controller&#xff0c;service&#xff0c;impl&#xff0c;mapper&#xff0c;里面都是空的&#xff0c;具体可以根据自己的代码习惯增加 代码生成脚本的使用可以看下使用 idea 生成实体类…

CAS中的ABA问题

ABA 问题是指在并发编程中&#xff0c;一个值从 A 变成 B&#xff0c;然后再变回 A&#xff0c;而导致误判的问题。在 CAS&#xff08;Compare and Swap&#xff09;等原子操作中&#xff0c;由于线程间的竞争&#xff0c;可能会发生 ABA 问题。 为了解决 ABA 问题&#xff0c…

Pycharm服务器配置python解释器并结合内网穿透实现公网远程开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

spring boot3自定义注解+拦截器+Redis实现高并发接口限流

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 内容简介 实现思路 实现步骤 1.自定义限流注解 2.编写限流拦截器 3.注册拦截器 4.接口限流测试 写在前…

sql中使用了in直接卡死

项目场景&#xff1a; 最近在做数据迁移的工作&#xff0c;会员库有200多万数据&#xff0c;组织机构有4万数据。要把这些数据迁移到新系统的数据库中&#xff0c;开发新系统之前完全没考虑过数据量。当数据导入之后&#xff0c;页面就各种报错。。。。。。。。。。。。。。。…

外包干了8天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【ZZULIOJ】1009: 求平均分(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 已知某位学生的数学、英语和计算机课程的成绩&#xff0c;求该生三门课程的平均分。 输入 输入三个整数&#xff0c;数据之间由空格隔开。 输出 输出占一行&#xff0c;包含一个实数&#xff0c…

Redis命令介绍

一、redis启动&#xff1a; 本地启动&#xff1a;redis-cli 远程启动&#xff1a;redis-cli -h host -p port -a password Redis 连接命令 1 AUTH password 验证密码是否正确 2 ECHO message 打印字符串 3 PING 查看服务是否运行 4 QUIT 关闭当前连接 5 SELECT index 切换…

2024.3.28abc晚训题解

VJ晚训网址点击传送晚训 A题 比较巧的输入方式就是循环n&#xff0c;内层套一个循环7 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;for(int i1;i<n;i){int ans0;for(int j1;j<7;j){int x;cin>>x;ansansx; }cout<<ans…

JUC内容概述

复习概念 Sleep和Wait的区别 Sleep是Thread的静态方法&#xff0c;wait是Object的方法&#xff0c;任何对象实例都可以使用sleep不会释放锁&#xff0c;他也不需要占用锁&#xff0c;暂停。wait会释放锁&#xff0c;但是调用他的前提是线程占有锁他们都可以被Interrupted方法…

SQLite数据库文件损坏的可能几种情况(一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十三&#xff09; 下一篇&#xff1a;SQLite使用的临时文件&#xff08;二&#xff09; 概述 SQLite数据库具有很强的抗损坏能力。如果应用程序崩溃&#xff0c…

鸿蒙hdc使用指导

简介 hdc&#xff08;HarmonyOS Device Connector&#xff09;是HarmonyOS为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备或者模拟器进行交互。 环境准备 hdc工具通过HarmonyOS SDK获取&#xff0c;存放于SDK的toolch…

2024-3-28 市场情绪强修复

这一轮退潮负反馈都修复了&#xff0c; 艾艾精工 博信股份 安奈尔 永悦科技 大理药业 &#xff0c;高新发展 也补跌了&#xff0c;收尸队也干活了&#xff0c;情绪不修复不接力得最好写照。这轮周期 宁科生物 已经7板&#xff0c;已经追平了 博信股份7板&#xff0c;看明天溢…

Mac安装minio

Mac安装minio 本文介绍使用 mac 安装 MinIO。 所有软件安装优先参考官网&#xff1a;MinIO Object Storage for MacOS — MinIO Object Storage for MacOS #使用 brew 安装 minio brew install minio/stable/minio#找到 minio tong ~ $ brew list minio /opt/homebrew/Cella…