千锋逆战班学习第34天
千锋逆战班学习第34天
努力或许没有收获,但不努力一定没收获,加油。
今天我学了Java课程的反射。
中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!
总结-反射
- 类对象
- 类的对象:基于某个类new出来的对象,也称为实例对象。
- 类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)。
- 类对象与类的对象互不包含,类的对象的产生基于类对象。
- 获取类对象:
- 通过类的对象,获取类对象。
- Student s = new Student();
- Class c = s.getClass();
- 通过类名获取类对象。
- Class c = 类名.class;
- 通过静态方法获取类对象。
- Class c = Class.forName( “ 包名. 类名 ” );
- 常用方法:
- Class.forName(“包名”) //获取类对象
- public String getName() //获取类名
- public String getPackage() //获取指定类对象的包
- public Class<? super T> getSuperclass()//获取父类的Class对象。
- public Class<? > getInterfaces() //获取接口的Class对象
- public Field[] getFields() //获取属性(自身+父类的公开属性)
- public Field[] getDeclaredFields() //获取Class对象的所有属性(无论什么属性public~private)
- public Method[] getMethods() //获取方法(自身+父类及间接父类所有公开方法)
- public Method[] getDeclaredMethods()//获取Class对象的所有方法(无论什么属性)
- public Constructor<?>[] getConstructors()//获取构造方法
- public T newInstance() //反射通过类对象创建类的对象
- Object o = c.newInstance();
Question_13_5
5.(TCP编程)根据提示,把下面的代码补充完整
//Clientjava
import java.net.*;
import java.io.*;
public class Client(
public static void main(String args[])throws Exception(
Socket s;
//创建一个到“127.0.0.1: 9000”的Tcp连接
//向Tcp连接输出“Hello World”并换行
//从服务器端读入一行文本,并打印出来s.close();
}
//Server, java
import java.io
import java.net.*;
public class Served
public static void main(String args[]) throws Exception (
//创建一个服务器端口对象
//获得一个客户的连接
//读入一行文本
//在读入的文本后面加上+" From Server"
//把处理之后的文本向客户端输出并换行〃关闭连接
}
)
答:
//client
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception{
//创建一个到“127.0.0.1: 9000”的Tcp连接
Socket s = new Socket("127.0.0.1",9000 );
//向Tcp连接输出“Hello World”并换行
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream(),"GBK"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream() , "GBK"));
pw.println("Hello World");
pw.flush();
//从服务器端读入一行文本,并打印出来s.close();
String message = br.readLine();
System.out.println(message);
System.out.println("s.close()");
pw.close();
br.close();
s.close();
}
}
//server
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
//创建一个服务器端口对象
ServerSocket server = new ServerSocket(9000);
//获得一个客户的连接
Socket client = server.accept();
System.out.println("服务开始");
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(),"GBK"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "GBK"));
//读入一行文本
String message = br.readLine();
System.out.println(message);
//在读入的文本后面加上+" From Server"
String mas = message + " From Server";
//把处理之后的文本向客户端输出并换行〃关闭连接
pw.println(mas);
System.out.println(mas);
pw.flush();
pw.close();
br.close();
client.close();
System.out.println("结束服务");
}
}
Question_13_6
6.(多线程,TCP)
创建一个多线程的TCP服务器以及客户端,完成下面的功能:读入客户端发给服务端的字符串,然后把所有 字母转成大写之后,再发送给客户端。
//Client
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int choice = 0;
do {
Socket client = new Socket("169.254.192.5",8989);
System.out.println("1.执行 2.退出");
choice = sc.nextInt();
switch (choice) {
case 1:
ClientThread ct = new ClientThread(client);
ct.start();
ct.join();
break;
default:
client.close();
break;
}
} while (choice != 2);
}
}
//ClientThread
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ClientThread extends Thread{
private Socket client;
public ClientThread(Socket client) {
super();
this.client = client;
}
@Override
public void run() {
Scanner sc = new Scanner(System.in);
try {
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "GBK"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(),"GBK"));
System.out.println("请输入字母");
String message = sc.next();
pw.println(message);
pw.flush();
String mas = br.readLine();
System.out.println(mas);
pw.close();
br.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Server
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8989);
System.out.println("服务开始");
while(true) {
Socket client = server.accept();
new ServerStringThread(client).start();
}
}
}
//ServerStringThread
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerStringThread extends Thread{
private Socket client;
public ServerStringThread(Socket client) {
super();
this.client = client;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "GBK"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "GBK"));
String message = br.readLine();
message = message.toUpperCase();
pw.println(message);
pw.flush();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Question_13_7
创建一个多线程的TCP服务器以及客户端,完成下面的功能:服务端:读入客户端发给服务器端的字符串, 在服务器当前目录下查找以该字符串作为文件名的文件,并把该文件内容发送给客户端。客户端:发送给服务器 端一个字符串filename表示服务器上的一个文件,然后从服务器端读入文件内容,并起名叫server_filename保 存在当前目录。例如,假设服务器当前目录下有个myphoto.jpg文件,则客户端发送字符串"myphoto.jpg”给 服务器端,然后从服务器端读入myphoto.jpg文件的内容,并起名为server_myphoto.jpg保存在客户端当前目 录下。
//Client
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
static final String Filename = "FilesClient\\";
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
Socket client = new Socket("169.254.192.5",1324);
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is,"GBK");
BufferedReader br = new BufferedReader(isr);
OutputStream os = client.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os,"GBK");
PrintWriter pw = new PrintWriter(osw);
System.out.println("请输入文件名:");
String filename = sc.next();
pw.println(filename);
pw.flush();
filename = Filename + "server_" + filename;
String mes = br.readLine();
System.out.println(mes);
File file = new File(filename);
file.createNewFile();
if(mes.equals("开始传输")) {
FileOutputStream fos = new FileOutputStream(filename);
BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedInputStream bis = new BufferedInputStream(is);
byte[] bytes = new byte[100];
int len;
while ((len = bis.read(bytes)) != -1) {
for (int i = 0; i < len; i++) {
bos.write(bytes[i]);
bos.flush();
}
}
bos.close();
bis.close();
System.out.println("传输成功");
pw.close();
br.close();
client.close();
}else {
pw.close();
br.close();
client.close();
}
}
}
//Server
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(1324);
System.out.println("服务开始");
while(true) {
Socket client = server.accept();
new SendFileServer(client).start();
}
}
}
// SendFileServer
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class SendFileServer extends Thread{
private static final String Filename = "FilesServer\\";
private Socket client;
public SendFileServer(Socket client) {
this.client = client;
}
@Override
public void run() {
try {
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is,"GBK");
BufferedReader br = new BufferedReader(isr);
OutputStream os = client.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os,"GBK");
PrintWriter pw = new PrintWriter(osw);
String filename = Filename + br.readLine();
File file = new File(filename);
if(file.exists()) {
pw.println("开始传输");
pw.flush();
BufferedOutputStream bos = new BufferedOutputStream(os);
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[100];
int len;
while ((len = fis.read(bytes)) != -1) {
for (int i = 0; i < len; i++) {
bos.write(bytes[i]);
bos.flush();
}
}
bos.close();
fis.close();
pw.close();
br.close();
client.close();
}else {
pw.println("文件不存在");
pw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
如有错误,请多包涵。