day15

知识点浅记一下

ping 使用来icmp来检查网络是否连通,并没有记录路径。 

tracert 使用icmp包记录并确定数据包访问目标所经过的路由,因此可以依据此命令判断故障发生的位置

netstat 用于监听端口(netstat -a列出所有端口使用情况)跟本地路由表(netstat -r显示本地路由表)

arp 是根据IP地址获取物理地址的一个链路层协议。

socket网络编程

IP地址+端口号组成socket套接字,是tcp和udp的基础

websocket,前端

socket原理机制

1)通信两端都有socket

2)网络通信其实就是socket之间的通信

3)数据在两个socket之间通过IO流传输

socket编程实现即时通信

//客户端
public class clientNode{
public static void main(String[] args){
int server Port = 8081;//服务端端口号(5050到9090之间一般)
String serverIp = "127.0.0.1";//服务端IP地址
//首先直接创建socket,端口号1~1023为系统保存,一般设在1023之外
try{
Socket socket = new Socket(serverIp,port); InputStreamReader reader = new InputStreamReader(System,in);//后面,操作系统级别的输入流
//创建 获取键盘输入内容 的字符输入流
BufferedReader systemIn = new BufferedReader(reader);
//创建字符输出流,向服务端输出内容
PrintWriter socketOut = new PrintWriter(socket.getOutStream()); //创建字符输入流,接受客户输入的内容
BufferedReder socketIn = newBufferedReader(new InputStreamReader(socket.getInputStream())) while(true){
//输入流获取键盘输入内容
Stringreadline = systemIn.readLine(); //输出流向服务端发送数据
socketOut.println(readline);
socketOut.flush(); //读取服务端返回的数据
String serverStr = socketIn.readLine();
System.out.println("服务端:" + serverStr);
if(serverStr.equals("bye")){
break;
} }
systemIn.close();
socketIn.close();
socketOut.close();
socket.close();
serverSocket.close(); }//try
}
}

服务端

public class ServerNode{
public static void main(String[] args){
int port = 8081;
try{
//创建ServerSocket,监听端口8081
ServerSocket serveSocket = new ServerSocket(port);
//调用服务器的accept方法,接收来自客户端的连接请求,在接收到客户端连接请求之前,此方法会进行阻塞(程序会在这等待),当有申请连接时会建立连接并返回一个socket
Socket socket = serverSocket.accept();
//创建服务端输入流:获取系统输入的数据
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
//创建客户端输入流,获取客户端传输的数据
InputStreamReader reader = new InputStreamReader(socket.getInputStream())
BufferedReader socketIn = new BufferedReader(reader);
//创建输出流,用于向客户端返回数据
PrintWriter socketOut = new PrintWriter(socket.getOutputStream); //
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in)); //创建输出流,用于向客户端返回数据
PrintWriter socketOut = new PrintWriter(socket.getOutputStream); while(true){ String clientStr = socketIn.readLine(); System.out.println("接收到客户端的内容:" + clientStr); if(readline.equals("bye")){
//服务端向客户端输出内容
socketOut.println(systemIn.readLine());
socket.flush(); break;
} clientStr = socketIn.readLine();
} systemIn.close();
socketIn.close();
socketOut.close();
socket.close(); } }
}

反射refect

反射机制的定义

程序运行中创造任意一个类对象,了解任意一个对象所属的类,了解任意一个类的成员变量和方法,并且可以调用

反射被视为动态语言的关键

1.Class(类)

解释什么叫反射

在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性, 并且能改变它的属性。

创建Class类的方式

1)类名.class

Class c1 = Man.class;

2)类的对象名.getClass()

Man m = new Man();
Class c2 = m.getClass();

3)Class.forName("完整包名");

Class c3 = Class.forName("xxx.day20.Man");

创建类对象有几种方式

1.new 2.clone 3.反序列化 4.反射的Class类的newInstance()方法

Java在将.class字节码文件载入时,JVM将产生一个java.lang.Class 对象代表该.class字节码文件,从该Class对象中可以获得类的许多基本信息,这就是反射机制

注意:

1)通过Class类的对象,可以知道他所描述的类的信息;

2)Class不是所有类的父类,Object才是(.class文件)

Class类表示的是一个类的.class文件

Class c = Man.class;//获取Man类的class文件

Man m = (Man)c.newInstance();//创建该类的对象

//使用.newInstance()方法,Man类必须有无参构造方法
Field f = c.getDeclaredField("name");
//获取类中的指定变量(包括私有变量)
syso(f.getName);
Field f = c.getField("name");//获取类中的指定变量(不包括私有)
syso(f.getName());
//获取类中所有变量返回field类型的数组
Field[] fs = c.getDeclaredFields();
foreach(){
syso(f.getType());//getType()获取变量的数据类型
}
//根据指定方法名和指定的参数列表数据类型,获取方法对象
Method m = c.getMethod(null,null);
//getMethod(String name,Class...parameters Type)
//name 方法名
//parameters Type参数列表的数据类型
getDeclaredMethod
//获取一个类的构造方法对象
Constructor cm = c.getConstructors(null);//声明参数列表
getConstructor()

2.Field(获取变量对象)

java.lang.reflect.Field类是记录对象属性的类

可以操作类中私有,以及公有等全部属性和属性的信息

常用方法

Field f = c.getDeclaredField("name");
Field f2 = c.getDeclaredField("age"); //获得属性名称
f.getName(); //获得属性类型
f.getType() //取得obj对象中这个属性的值,例如获取Man中的name存在张三名字
String v = (String)f2.get(Object obj) //给obj对象中这个属性赋值
f2.set(Object obj, x ) //开启私有变量的访问权限
f2.setAccessible(true); f2.setAccessible(true);//私有的变量需要开启私有变量的访问权限
f2.set(m, 12);

class

1)获取一个类的所有信息(变量、方法、构造方法)

2)创建类对象newInstance()

Field

1)访问变量或给变量赋值

Method

1)执行具体类对象的指定方法

3.Method(获取方法对象)

Class c = Man.class;
Man man = new Man();
//Method m = c.detDeclareMethod("speak",null);
//m.invoke(man,null); Method m = c.getDeclareMethod("speak",String.class,int.class);
m.invoke(man,"add",123);

day15 Socket网络编程 & 反射的更多相关文章

  1. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  2. NO.7:自学python之路------类的方法、异常处理、socket网络编程

    引言 我visual studio 2017就算体积巨大.启动巨慢.功能简陋也不会安装PyCharm的,嘿呀,真香.好吧,为了实现socket网络编程,更换了软件. 正文 静态方法 只是在名义上归类管 ...

  3. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...

  4. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  5. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  6. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  7. python之Socket网络编程

    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...

  8. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  9. Socket网络编程-基础篇

    Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...

  10. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

随机推荐

  1. 在vm中安装centos7

    步骤: 1.打开VMware Worktation,点击"创建新的虚拟机": 2.一般选择"典型(推荐)",之后下一步. 3.选择"稍后安装操作系统& ...

  2. .NET 反向代理 YARP 通过编码方式配置域名转发

    前面介绍了 YARP 通过配置文件的方式配置代理转发(传送门),而众所周知,微软的一贯作风就是能通过配置文件做的事情,通过编码的方式也能实现!YARP 也不例外,废话不多说,直接上代码! 首先,参照官 ...

  3. 【前端必会】HtmlWebpackPlugin 和 SplitChunksPlugin 是什么?

    背景 了解什么是webpack插件,在来看一下不能不知道的两个插件 HtmlWebpackPlugin 有了这个插件,webpack执行后会自动帮我们在dist目录生成一个html文件,并且添加bun ...

  4. PAT (Basic Level) Practice 1007 素数对猜想 分数 20

    让我们定义dn​为:dn​=pn+1​−pn​,其中pi​是第i个素数.显然有d1​=1,且对于n>1有dn​是偶数."素数对猜想"认为"存在无穷多对相邻且差为2的 ...

  5. python基本数据类型以及基础运算符

    今日分享内容 作业讲解 python基本数据类型 与用户交互 格式化输出 基本运算符 多种赋值方式 逻辑运算符 成员运算符 分享内容详细 # 附加练习题(提示:一步步拆解) # 1.想办法打印出jas ...

  6. Codeforces Round #577 (Div. 2) C. Maximum Median

    题意:就是给一n(奇数)个元素数组,可以对它的元素执行k次+1操作,递增排序,求中位数最大是多少. 那我们在排完序之后,中位数前的元素可以不管它,只要对中位数后的操作就行,我们要判断和中位数相等的元素 ...

  7. JDK 8之前日期和时间的API

    JDK 8之前日期和时间的API(1) System类中的currentTimeMillis():返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差.称为时间戳. java.util ...

  8. NOI2011阿狸的打字机

    题目链接 昨天晚上yy出了一个做法后,感觉...好难打啊...,于是先回去休息.今天来打时,还是感觉细节好多,于是就打了两个小时.打完过了编译后,居然过了样例,直接交,尼玛居然过了???......还 ...

  9. JUC(5)BlockingQueue四组API

    1.读写锁ReadWriteLock package com.readlock; import java.util.HashMap; import java.util.Map; /** * ReadW ...

  10. 闻道Go语言,6月龄必知必会

    大家好,我是马甲哥, 学习新知识, 我的策略是模仿-->归纳--->举一反三, 在同程倒腾Go语言一年有余,本次记录<闻道Go语言,6月龄必知必会>,形式是同我的主力语言C#做 ...