一、网络编程
1、UDP
url:统一资源定位符
互联网的三大基石:html、http、url
协议:getProtocol()
域名:getHost()
端口:getPort()
得到锚点:getRef()
URL url=new URL("https://www.taobao.com");
System.out.println(url);
System.out.println("协议"+url.getProtocol());
System.out.println("端口"+url.getPort());
System.out.println("域名"+url.getHost());
System.out.println("查询内容"+url.getQuery());
System.out.println("锚点"+url.getRef());
2、传输协议
TCP:面向连接,3次握手,安全但开销大,效率低,大小没有限制;
UDP:非面向连接,不安全协议简单,开销小,效率高,只管发只管写,大小限制一般不超过60k;
面向Socket编程:传输层为应用层开辟的口子,用来传出数据
UDP对Socket实现:
DatagramPacket: 打包|数据报包
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。
DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket length接收数据包的长度。
DatagramSocket : 定义发送端或者接收端
DatagramSocket(int port) 构造一个数据报套接字绑定到本地主机上的指定端口。
DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,绑定到指定的本地地址。
3、UDP基本流程
发送端:
定义发送端DatagramSocket(int port)
准据数据
打包
发送void send(DatagramPacket p) 从这个套接字发送一个数据报包。
关闭
基本流程:接收端
定义接收端:DatagramSocket(int port)
打包用来接收数据
接收数据: receive(DatagramPacket p) 从这个套接字接收数据报包。
处理数据:byte[] getData() int getLength()
关闭
//发送端
public static void main(String[] args) throws IOException {
//定义发送端
DatagramSocket send=new DatagramSocket(1111);
//准备数据
byte[] data="hello!!!".getBytes();
//打包
DatagramPacket packet = new DatagramPacket(data,0,data.length,new InetSocketAddress("localhost", 6767));
//发送
send.send(packet);
//关闭
send.close();
}
//接收端
public static void main(String[] args) throws IOException {
//定义接送端
DatagramSocket rec=new DatagramSocket(6767);
//打包用来接收数据
byte[] b=new byte[1024*10];
DatagramPacket packet = new DatagramPacket(b, b.length);
//接收数据
rec.receive(packet);
//处理数据
byte[] data=packet.getData();
int len=packet.getLength();
System.out.println(new String(data,0,len));
//关闭
rec.close();
}
4、TCP基本流程
客户端:
定义客户端:Socket()
io操作
关闭
服务端:
定义服务端: ServerSocket(int port) 创建一个服务器套接字绑定到指定端口。
阻塞式监听:accept()
io操作
数据的处理
关闭
//客户端
public static void main(String[] args) throws UnknownHostException, IOException {
TcpSendTest in=new TcpSendTest();
//定义客户端
Socket so=new Socket("localhost",6060);
//IO操作
OutputStream out=so.getOutputStream();
System.out.println("请输入用户名:");
String name=in.input();
System.out.println("请输入密码:");
String pwd=in.input();
String str="name="+name+"&"+"pwd="+pwd;
out.write(str.getBytes());
InputStream is = so.getInputStream();
byte[] b=new byte[1024];
int len=is.read(b);
System.out.println(new String(b,0,len));
is.close();
//刷出
out.flush();
//关闭
out.close();
so.close();
}
public String input() {
Scanner scan=new Scanner(System.in);
String str=scan.next();
return str;
}
//服务端
public static void main(String[] args) throws IOException {
System.out.println("---------服务端---------");
//定义服务端
ServerSocket server = new ServerSocket(6060);
boolean flag=true;
while(flag) {
//阻塞监听
Socket socket = server.accept();
//io操作
InputStream in =socket.getInputStream();
byte[] b=new byte[1024];
int len=in.read(b);
//数据处理
String str=new String(b,0,len);
String[] s=str.split("&");
String uname=null;
String upwd=null;
for(String i : s) {
// System.out.println(i);
String[] n=i.split("=");
// System.out.println(Arrays.toString(n));
if(n[0].equals("name")) {
uname=n[1];
}else if(n[0].equals("pwd")) {
upwd=n[1];
}
}
OutputStream os = socket.getOutputStream();
if(uname.equals("cl")&&upwd.equals("123")) {
os.write("登录成功!".getBytes());
}else {
os.write("登录失败!".getBytes());
}
// System.out.println(uname+upwd);
// System.out.println(str);
os.flush();
//关闭
os.close();
in.close();
socket.close();
}
server.close();
}
二、反射
反射发生在程序运行期间的行为;
java反射机制,可以实现的功能:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行是判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理
反射的源头:一个类型的class对象
如果能够获取一个类的class对象,可以对它进行任何操作;
获取反射的源头|class对象:
对象.getClass()
类名.class();
Class.forName(包名+类名)
public class ReflectTest {
public static void main(String[] args) {
ReflectTest rf = new ReflectTest();
//对象.class
Class<?> c1 = rf.getClass();
//类.class
Class<ReflectTest> c2 = ReflectTest.class;
//Class.forName()
Class<?> c3 = null;
try {
c3=Class.forName("com.cl.test.RefletTest");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
421

被折叠的 条评论
为什么被折叠?



