网络通信
- 网络编程中有两个主要问题
- 问题1: 如何准确的定位到网络上的一台或多台主机
- 问题2: 找到主机后如何进行通信
javaWeb: 网页编程 B/S
网络编程:TCP/IP c/s
网络通信的要素
-
对应问题1:IP和端口号
-
对应问题2:网络通信协议 TCP/IP参考模型(应用层,传输层,网络层,物理+数据链路层)
(以下代码记得finally关闭资源)
IP和端口号
IP
唯一标识Internet上的计算机(通信实体)
在java中使用InetAddress类代表IP
IP地址的分类1:IPV4和IPV6
- IPV4:4个字节组成,4个0-255.大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽,以点分十进制标识,如192.168.1.1
- IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制为表示,数之间用冒号(:)分开,如:3ffe:3201:1231:1434:c8ff:fe4d:db39:1988
IP地址的分类2:公网地址(万维网使用)和私有地址(局域网)
- 192.168.开头就是私有地址,范围为192.168.0.0--192.168.255.255,专门为组织机构内部使用
端口
端口表示计算机上的一个程序的进程;
- 不同的进程有不同的端口号!用来区分软件
- 被规定 0—65535
- TCP,UDP:65535*2 tcp:80,udp:80吗,单个协议端口号不能冲突
- 端口分类
- 公有端口号 0—1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
- 程序注册端口:1024——49151,分配用户或者程序
- Tomcat:8080
- MYSQL:3306
通信协议
协议:就是一个约定,好比我们在说普通话
TCP/IP协议簇:实际上是一组协议
-
TCP:用户传输协议
-
UDP:用户数据报协议
出名的协议:
- TCP
- IP:网络互连协议
TCP UDP对比
TCP:打电话
-
连接,稳定
-
三次握手,四次挥手 最少需要三次,保证稳定连接 A:你瞅啥? B:瞅你咋地? A:干一场! A:我要走了。 B:你真的要走了吗? B:你真的真的要走了吗? A:我真的要走了。
-
客户端 服务端
-
传输完成,释放连接,效率低
UDP:发短信
- 不连接,不稳定
- 客户端、服务端:没有明确的界限
- 不管准没准备好,都可以发给你
- 导弹(什么时候发都可以)
TCP实现聊天
客户端
1.连接服务器ServerSocket
2.发送消息
服务端
1.建立服务的端口ServerSocket
2.等待用户的连接 accept
3.接收消息
实现文件上传
URL
统一资源定位符:定位资源的,定位互联网上的某一个资源
DNS域名解析
协议://ip地址:端口/项目名/资源
- URL下载网络资源(前提要启动Tomcat)
package com.mjh.net;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLDown {
public static void main(String[] args) throws IOException {
//1.下载地址
URL url = new URL("https://m10.music.126.net/20200728182138/2baf74e0fd94ad0e48b39cdf46a08d06/yyaac/0708/0652/0508/0b9b6827b718aa223af92bd52aa2424f.m4a");
//2.连接到这个资源 HTTP
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
InputStream inputStream=urlConnection.getInputStream();
FileOutputStream fos=new FileOutputStream("4f.m4a");
byte[] buffer=new byte[1024];
int len;
while ((len=inputStream.read(buffer))!=-1){
fos.write(buffer,0,len);//写出这个数据
}
fos.close();
inputStream.close();
urlConnection.disconnect();//断开连接
}
}