网络编程:
网络:通过多台计算机构建的一个大网
1:为什么需要网络?
多台计算机通过网络连接,进行通信,数据交互、数据共享。
去除地域限制 拉近人与人之间的举例
2:网络通信的基石
三大基石(ip标示计算机 协议通信规则 端口定位应用程序)
InetAddress类:
这个类是对IP地址的封装
常用方法:
- static InetAddress getLocalHost():返回本地计算机的InetAddress。
- String getHostName():返回指定InetAddress对象的主机名。
- String getHostAddress():返回指定InetAddress对象的主机地址的字符串形式
public class Test02 {
public static void main(String[] args) throws UnknownHostException {
//获取一个主机InetAddress对象
InetAddress in = InetAddress.getLocalHost();
//使用对象的方法
System.out.println("获取ip地址:"+in.getHostAddress());
System.out.println("主机名称"+in.getHostName());
byte[] buf = in.getAddress();
System.out.println(Arrays.toString(buf));
// 获取对象的方法
InetAddress[] ips = InetAddress.getAllByName("www.baidu.com");
for(InetAddress ip:ips) {
System.out.println(ip.getHostAddress()+"=="+ip.getHostName());
}
}
}
Socket 和 ServerSocket 类
1: 客户端称之为socket对象
2:服务器称之为serversocket对象
3:客户端在创建时需要指定ip以及端口
4:服务器创建时需要指定监听端口
5:数据的收发都是通过流完成的 所有数据信息都可以通过socket获取输入/输出流 getInputStream/getOutputStream
6: 对于服务器而言,获取客户端的socket对象 accept方法 (阻塞方法)
使用Socket模拟客户端给服务端发送数据信息
package com.mage.servers;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import javax.sound.sampled.LineListener;
public class ServerB {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10001);
Socket clinet = server.accept();
InputStream is =clinet.getInputStream();
byte[] ch = new byte[1024];
int len = is.read(ch);
System.out.println(new String(ch,0,len));
is.close();
clinet.close();
}
}
package com.mage.servers;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.Socket;
public class ClinetB {
public static void main(String[] args) throws IOException {
Socket clinet = new Socket("192.168.101.45",10001);
OutputStream out = clinet.getOutputStream();
out.write("wandaye".getBytes());
out.close();
clinet.close();
}
}
DatagramPacket类、DatagramSocket类
都放在java.net包中
DatagramSocket类用于表示发送和接收数据包的套接字
DatagramPacket类用来表示数据包
客户端
package com.mage.send;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Send {
public static void main(String[] args) throws IOException {
//1:创建发送方对象
DatagramSocket send = new DatagramSocket(9999);
//2:构建发送方的数据包对象 buf 发送数据的字节数组 length发送数据的长度 发送到那个ip去 port发送到那个端口
String str = "老薛已经上线";
byte[] buf = str.getBytes();
int len = buf.length;
InetAddress ip = InetAddress.getLocalHost();
int port = 10001;//接受方的端口
DatagramPacket dp = new DatagramPacket(buf, len, ip, port);
//3:发送信息
send.send(dp);
//4;关闭
send.close();
}
}
服务器端
package com.mage.rec;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Arrays;
public class Rec {
public static void main(String[] args) throws IOException {
//1:创建接收方对象
DatagramSocket rec = new DatagramSocket(10001);
//2:创建接受数据包对象
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3:接受发送方发送数据信息
rec.receive(dp); //会将数据信息填充在DatagramPacket对象中 阻塞方法
//4:分析数据
InetAddress in = dp.getAddress();
byte[] recBuf = dp.getData();
int length = dp.getLength();
int port = dp.getPort();
String data = new String(recBuf,0,length);
System.out.println(in.getHostName()+"=="+data+"=="+port);
}
}
collection类
存储元素的特点 无序 可重复 对于所有的集合框架中的对象 只能存储引用类型
添加元素
add(Object) 添加元素 返回是否添加成功 true/false
addAll(Coll) 添加一个集合
删除元素
clear()清空所有元素
remove()移除一个
removeAll(Coll) 移除交集
retainAll(Coll) 保留交集
修改元素
没有修改元素
查看元素
isEmpty
size
contains
containsAll
package com.mage.collectio.lian;
import java.util.ArrayList;
import java.util.Collection;
public class Test01 {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("玛利亭");
coll.add(2);
System.out.println(coll);
Collection coll2 = new ArrayList();
coll2.add("肖立亭");
coll2.add("java");
System.out.println(coll.addAll(coll2));
System.out.println(coll);
//coll.clear();
System.out.println(coll.remove("java"));
System.out.println(coll.removeAll(coll2));
System.out.println(coll.retainAll(coll2));
System.out.println(coll);
System.out.println("查看当前集合是否为null:"+coll.isEmpty());
System.out.println("查看当前集合元素个数:"+coll.size());
System.out.println("查看当前集合是否包含元素2:"+coll.contains(2));
}
}
一张图
[外链图片转存失败(img-G1EUUvz9-1564403264774)(D:\360MoveData\Users\万达爷\Desktop\码歌学习\7-29\集合.png)]
迭代器
Iterable 是java.lang包下的接口 实现改接口都能够作为foreach的目标
Iterator 是java.util包下的接口 迭代器 用来迭代当前集合对象的
Iterator 是一个接口 ArrayList中通过内部类完成了对于改接口的实现 获取的其实是实现类对象
URL类
URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是更为复杂
的对象的引用,例如对数据库或搜索引擎的查询。 简单的可以把URL理解为包含:协议、主机名、端口、路径、
查询字符串和参数等对象。每一段可以独立设置。
获取url定义的资源的方法
getProtocol() 获取该URL的协议名。
getHost() 获取该URL的主机名。
getDefaultPort() 获取默认端口
getPort() 获取该URL的端口号,如果没有设置端口,返回-1。
getFile() 获取该URL的文件名。
getRef() 获取该URL在文件中的相对位置。
getQuery() 获取该URL的查询信息。
getPath() 获取该URL的路径
getAuthority() 获取该URL的权限信息
getUserInfo() 获得使用者的信息
getRef() 获得该URL的锚
public static void test1(){
try {
//URL url = new URL(spec);
URL url = new URL("http://baidu.com");
System.out.println("获取该URL的协议名:" + url.getProtocol());
System.out.println("获取该URL的主机名:" + url.getHost());
System.out.println("获取该URL的端口号,如果没有设置端口,返回-1:" + url.getPort());
System.out.println("获取该URL的文件名:" + url.getFile());
System.out.println("获取该URL在文件中的相对位置:" + url.getRef());
System.out.println("获取该URL的查询信息:" + url.getQuery());
System.out.println("获取该URL的路径:" + url.getPath());
System.out.println("获取该URL的权限信息:" + url.getAuthority());
System.out.println("获得使用者的信息:" + url.getUserInfo());
System.out.println("获得该URL的锚:" + url.getRef());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
ln(“获取该URL的路径:” + url.getPath());
System.out.println(“获取该URL的权限信息:” + url.getAuthority());
System.out.println(“获得使用者的信息:” + url.getUserInfo());
System.out.println(“获得该URL的锚:” + url.getRef());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}