网络概述
分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模宏大、
功能强大的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。
网络通信要素
1. IP & 端口号
1.1 IP
网络中主机的唯一标识,通过Ip可以定位到主机位置
1.2 端口号
用于标识当前主机上运行的进程
2.网络协议
2.1 TCP
- 使用之前需要建立TCP连接,形成传输通道
- 传输前采用“三次握手”方式,点对点通信,可靠性高
- 可进行大数据量传输
- 传输完毕要释放连接
2.2 UDP
- 不需要建立连接
- 发送数据是以报文形式,将数据封装成数据包
- 发送数据时不需要去人对方是否整备好,以及接收到后也不确认,不可靠
- 发送完不需要释放资源,开销小,效率快
java中的网络
1 2 3 4
| InetAddress address1 = InetAddress.getByName("192.168.2.1"); System.out.println(address1.getHostAddress()); System.out.println(address1.getHostName());
|
1. 服务端
1 2 3 4 5 6 7 8 9 10
| server = new ServerSocket(8888);
System.out.println("等待连接...."); Socket client = server.accept();
InetAddress clientAddress = client.getInetAddress();
|
2. 客户端
1 2
| socket = new Socket("192.168.10.146", 8888);
|
URL编程
1. UDP
UDP编程
- 1.DatagramSocket:UDP对应的socket
- 2.DatagramPacket:UDP中的数据报包类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@Test public void sender() throws IOException { InetAddress ip = InetAddress.getByName("192.168.10.182"); DatagramSocket ds = new DatagramSocket();
String str = "hello"; byte[] buf = str.getBytes(); DatagramPacket p = new DatagramPacket(buf, 0, buf.length, ip, 8888);
ds.send(p); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
@Test public void receiver() throws IOException { DatagramSocket ds = new DatagramSocket(8888);
byte[] buf = new byte[100]; DatagramPacket p = new DatagramPacket(buf, 0, buf.length);
System.out.println("等待接收"); ds.receive(p); System.out.println("接收完成");
System.out.println(new String(buf, 0, p.getLength())); }
|
2. URL
URL:统一资源定位符
示例:http://192.168.10.162:9000/UrlTest/img/girl.jpg?name=
① ② ③ ④ ⑤
- ①:网络协议
- ②:IP或域名
- ③:端口号
- ④:具体的资源路径
- ⑤:查询
1 2 3 4 5 6 7 8 9 10 11 12 13
| URL url = new URL("https://cdn.sensen.fun/github/img/default_bg.png");
System.out.println(url.getHost()); System.out.println(url.getPort()); System.out.println(url.getPath()); System.out.println(url.getQuery());
URLConnection connection = url.openConnection();
InputStream in = connection.getInputStream();
|