Java从零开始学习——Java网络编程
2021-01-06 18:29
                         标签:host   fileinput   数据   组织   输出   准备   获取   输出流   外部    TCP(电话)、UDP(邮件) 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 数据交换——通信 通信双方地址——IP地址+端口号(准确定位网络上的一台或多台主机) 网络通信协议(如何进行通信)   javaWeb:网页编程 B/S 网络编程:TCP/IP C/S   ip地址:InetAddress 定位唯一一台网络上的计算机 127.0.0.1 本机地址Localhost 分类 IPV4/IPV6  IPV4 127.0.0.1 4个字节组成 0~255 42亿  IPV6 128位 8个无符号整数 公网(互联网)-私网(局域网)   192.168.xxx.xxx,专门给组织内部使用  ABCD类地址   端口表示计算机上的一个程序的进程 不同的进程有不同的端口号,用来区分软件 0~65535 TCP、UDP 65535*2 单个协议下,端口号不能冲突 分类 公有端口 0~1023  HTTP 80  HTTPS 443  FTP 21  Telent 23 程序注册端口 1024~491515  Tomcat 8080  MySQL 3306  Oracle 1521 动态、私有 49152~65535     协议:约定 网络通信协议:速率、传输码率、代码结构、传输控制等 问题:非常的复杂(通信工程)  大事化小:分层 TCP/IP协议簇:实际上是一组协议 TCP:用户传输协议 UDP:用户数据报协议 出名协议: TCP:传输 IP:网络互连协议   TCP和UDP对比 TCP:打电话 连接、稳定 三次握手、四次挥手 客户端、服务端 传输完成、释放链接、效率低   UDP:发短信 不连接、不稳定 客户端、服务端没有明确的界限 不管有没有准备好,都可以发给你 导弹 DDOS:洪水攻击、饱和攻击   客户端 创建socket,连接服务器 创建输出流os 创建文件读取流fis fis读取buffer,os写出文件(管道流) 通知服务器,传输完毕 创建is接收服务器传输内容,确认服务器接收完毕,关闭资源   服务器 创建ServerSocket服务端口 创建Socket,等待(监听)用户连接Accept 创建输入流,获取客户端文件 创建文件输出流 接收完毕,通知客户端可以关闭资源 客户发送端(不需要连接服务器)   客户接受端   服务端 可自定义服务器 可用别人的(Tomcat)服务器   客户端 可自定义客户端 可用别人的(浏览器)客户端   以后javaweb主要用别人的服务器   统一资源定位符:定位互联网上的资源   Java从零开始学习——Java网络编程 标签:host   fileinput   数据   组织   输出   准备   获取   输出流   外部    原文地址:https://www.cnblogs.com/kevinsblog/p/12975845.html网络编程
1、概述
1.1、计算机网络
1.2、网络编程目的
1.3、网络通信的要素
 
OSI七层网络模型 
TCP/IP四层概念模型 
对应的网络协议 
 
应用层Application 
应用层 
HTTP\TFTP\FTP\NFS\WAIS\SMTP 
 
表示层Presentation 
应用层 
Telnet\Rlogin\SNMP\Gopher 
 
会话层Session 
应用层 
SMTP\DNS 
 
传输层Transport 
传输层 
Y 
 
网络层Network 
网路层 
IP\ICMP\ARP\RARP\AKP\UUCP 
 
数据链接层Data Link 
数据链接层 
FDDI\Ethernet\Arpanet\PDN\SLIP\PPP 
 
物理层Physical 
数据链接层 
E 
1.3.1 IP
1 //查询本机地址
2 InetAddress ip1 = InetAddress.getByName("127.0.0.1");
3 InetAddress ip2 = InetAddress.getByName("loaclhost");
4 InetAddress ip3 = InetAddress.getLocalHost();
5 ?
6 //查询网站地址
7 InetAddress ip4 = InetAddress.getByName("www.baiu.com");
8 //四个get方法
9 ip4.getHostAddress();
1.3.2 端口
1 #查看所有端口
2 netstat -ano
3 #查看具体端口
4 netstat -ano|findstr "5900"
5 #查看具体端口的进程
6 tasklist|finstr "8696"
1 InetSocketAddress port1 = new InetSocketAddress("127.0.0.1",8080);
2 InetSocketAddress port2 = new InetSocketAddress("localhost");
3 ?
4 port1.getAddress();
5 port1.getHostName();
6 port1.getPort();
1.3.3 通信协议
 1 至少三次才能保证稳定链接
 2 A:你瞅啥?
 3 B:瞅你咋地?
 4 A:干一场?!
 5 ?
 6 ?
 7 A:我要走了!
 8 B:你真的要走了吗?
 9 B:你真的真要走了吗?
10 A:我真的要走了!
1.4 TCP通信机制
1 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9999);
1 OutputStream os = socket.getOutputStream();
1 FileInputStream fis = new FileInputStream(new File("name.file"));
1 byte[] buffer = new byte[1024];
2 int len;
3 while ((len = fis.read(buffer)) != -1)
4 {
5     os.write(buffer,0,len);
6 }
1 socket.shutdownOutput();
 1 InputStream is = socket.getInputStream();
 2 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 3 byte[] buffer2 = new byte[1024];
 4 int len2;
 5 while ((len2 = is.read(buffer2)) != -1)
 6 {
 7     baos.write(buffer2,0,len2);
 8 }
 9 System.out.println(baos.toString());
10 ?
11 baos.close();
12 is.close();
13 fis.close();
14 os.close();
15 socket.close();
1 ServerSocket serverSocket = new ServerSocket(9999);
1 Socket socket = serverSocket.accept();
1 InputStream is = socket.getInputStream();
1 FileOutputStream fos = new FileOutputStream(new File("Receive.png"));
2 byte[] buffer = new byte[1024];
3 int len;
4 while ((len = is.read(buffer)) != -1)
5 {
6     fos.write(buffer,0,len);
7 }
1 OutputStream os = socket.getOutputStream();
2 os.write("接收完毕,可关闭连接.".getBytes());
3 ?
4 os.close();
5 fos.close();
6 is.close();
7 socket.close();
8 serverSocket.close();
 
1.5 UDP
 1 //建立Socket
 2 DatagramSocket socket = new DatagramSocket();
 3 ?
 4 //获取控制台输入内容
 5 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 6 //循环输入
 7 while (true)
 8 {
 9     String data = reader.readLine();
10     byte[] datas =  data.getBytes();
11     int port = 6666;
12     //建立包
13     DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("127.0.0.1",port));
14     //发送包
15     socket.send(packet);
16     //断开连接条件
17     if (data.equals("bye"))
18     {
19         break;
20     }
21 }
22 //关闭资源
23 socket.close();
 1 //开放端口
 2 DatagramSocket socket = new DatagramSocket(6666);
 3 //循环接收
 4 while (true)
 5 {
 6     //准备接收packet
 7     byte[] container = new byte[1024];
 8     DatagramPacket packet = new DatagramPacket(container,0,container.length);
 9     socket.receive(packet);
10 
11     //写出包
12     byte[] datas = packet.getData();
13     String ReceiveData = new String(datas,0,datas.length);
14     System.out.println(ReceiveData);
15 
16     //断开连接条件
17     if (ReceiveData.equals("bye"))
18     {
19         break;
20     }
21 }
22 //断开资源
23 socket.close();
1.6 Tomcat
1.7 URL
协议://ip地址:端口/项目名/资源