java-网络编程入门

导读:


1.网络:
 将不同区域的计算机群和外部设备通过通信设备组成的网络集群,按大小可分为局域网,城域网,广域网(互联网)。

2.地址:
ip地址:确定网络上的一个绝对地址,位置->相当于房子的地址

3.端口号:
  用于区分计算机软件->相当于房子的房门号 ->2个字节 0-65535,共65536个端口号
(1)在同一个协议下端口号不可重复,不同协议下可以重复
(2)1024以下的尽量避免使用

4.资源定位:
 URL统一资源定位符:URI->统一资源

 5.数据的传输
 (1)协议:
 1)TCP:类似电话,三次握手,面向连接,安全可靠,效率低下,基于字节流
 2)UDP:类似短信 ,面向无连接,效率高,数据可能丢失
 (2)传输:
 1)先封装
 2)后拆封
 
 
 相关类:
 1.InetAddress(封装计算机的IP地址和DNS,没有端口) ->InetSocketAddress
 (1)方法:
  getHostAddress()返回IP地址
  getHostName()返回域名/本机为计算机名
 
 2.URL
 由四部分组成:协议 ->存放资源的主机域名 ->端口号->资源文件名
 (1)创建:
      URL url=new URL(String url);绝对路径
      URL url=new URL(URL context,String url);相对路径
 (2)方法:
     URL url=new URL("https://piaofang.maoyan.com/dashboard?date=2019-01-02");
    System.out.println("协议:"+url.getProtocol());
    System.out.println("存放资源的主机域名:"+url.getHost());
    System.out.println("端口号:"+url.getPort());
    System.out.println("资源文件名:"+url.getFile());
    System.out.println("参数:"+url.getQuery());
    System.out.println("锚点:"+url.getRef());
 
 3.TCP:ServerSocket ->Socket
 
 
 4.UDP:DatagramSocket ->DatagramPacket
 (1)客户端:
 1)创建客户端:DatagramSocket +指定端口
 2)准备数据 :  字节数组
 3)打包:   DatagramPacket  + 服务器地址+端口
 4)发送:
 5)释放资源:
 
 (2)服务器端:
 1)创建服务端: DatagramSocket +指定端口
 2)准备接收容器: 字节数组  封装    DatagramPacket
 3)封装成包:-》接收数据
 4)分析:
 5)释放资源:
 

上代码了解一下:

1.InetAddress

 1 package com.etc;
 2 
 3 import java.net.InetAddress;
 4 import java.net.InetSocketAddress;
 5 import java.net.UnknownHostException;
 6 
 7 
 8 public class InetDemo {
 9     public static void main(String[] args) throws UnknownHostException {
10 
11         /*InetAddress ip=InetAddress.getLocalHost();两种方法均可以获得指定的主机名对应的IP地址*/
12         InetAddress ip=InetAddress.getByName("逐梦青空");
13         //本机名称
14         System.out.println(ip.getHostName());
15         //获取的是  IPv4 地址
16         System.out.println(ip.getHostAddress());
17         System.out.println("****************");
18         
19         InetSocketAddress id=new InetSocketAddress("逐梦青空",8080);
20 
21         System.out.println(id.getAddress());
22         System.out.println(id.getHostString());
23         System.out.println(id.getHostName());
24         //以上三种方法均可以获得对应ip地址下的主机名
25         System.out.println(id.getPort());
26     }
27 }

效果截图:

2.InetSocketAddress

 1 package com.etc;
 2 
 3 import java.net.InetSocketAddress;
 4 /*
 5  * 套接字socket,包含端口并将其加以封装
 6  * InetSocketAddress isa=new InetSocketAddress(String hostname,int port);
 7  */
 8 public class InetSocketDemo {
 9     public static void main(String[] args) {
10          //不仅可以封装ip地址和DNS,还可以封装port即端口号
11         InetSocketAddress isa=new InetSocketAddress("逐梦青空",8080);
12         System.out.println("端口号:"+isa.getPort()+";地址: "+isa.getAddress()+";主机名:"+isa.getHostName());
13 
14     }
15 }

效果截图:

3.URL

 1 package com.etc;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.OutputStreamWriter;
 9 import java.net.URL;
10 
11 public class URLDemo {
12 
13     public static void main(String[] args) throws IOException {
14 
15         URL url=new URL("https://photo.fengniao.com/f_15.html");
16         System.out.println("协议:"+url.getProtocol());
17         System.out.println("存放资源的主机域名:"+url.getHost());
18         System.out.println("端口号:"+url.getPort());
19         System.out.println("资源文件名:"+url.getFile());
20         System.out.println("参数:"+url.getQuery());
21         System.out.println("锚点:"+url.getRef());
22         
23         //利用openStream()方法返回输入流资源
24         BufferedReader bf=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));
25         //信息重组以文件形式返回
26         BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("蜂鸟.html"),"utf-8"));
27         //利用循环读取输入流信息
28         String msg=null;
29         while((msg=bf.readLine())!=null) {
30             bw.append(msg);
31             bw.newLine();
32             
33         }
34         //关闭流
35         bf.close();
36         bw.close();
37     }
38 
39 }

效果截图:

4.UDP

(1)客户端

 1 package com.test;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.InetSocketAddress;
 7 import java.net.SocketException;
 8 
 9 /*
10  * 1)创建客户端:DatagramSocket +指定端口
11  * 2)准备数据 :  字节数组
12  * 3)打包:   DatagramPacket  + 服务器地址+端口
13  * 4)发送:
14  * 5)释放资源:
15  */
16 public class Myclient {
17 
18     public static void main(String[] args) throws IOException {
19         //创建客户端
20         DatagramSocket client=new DatagramSocket(6666);
21         //准备数据 :  字节数组
22         String msg="我很喜欢敲代码!";
23         byte[] by=msg.getBytes();
24         //打包:   DatagramPacket  + 服务器地址+端口
25         //DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port)
26         DatagramPacket packet=new DatagramPacket(by,by.length,new InetSocketAddress("逐梦青空",8888));
27         //发送:
28         client.send(packet);
29         //释放资源
30         client.close();
31     }
32 
33 }

(2)服务器端

 1 package com.test;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.SocketException;
 7 
 8 /*
 9  * 1)创建服务端: DatagramSocket +指定端口
10  * 2)准备接收容器: 字节数组  封装    DatagramPacket
11  * 3)封装成包:-》接收数据
12  * 4)分析:
13  * 5)释放资源:
14  */
15 public class Myserver {
16 
17     public static void main(String[] args) throws IOException {
18         //创建服务端
19         DatagramSocket server=new DatagramSocket(8888);
20         //准备接收容器 1M
21         byte[] by=new byte[1024*1024];
22         //
23         DatagramPacket packet=new DatagramPacket(by,by.length);
24         //接收数据
25         server.receive(packet);
26         //分析:
27         byte[] data=packet.getData();
28         int len=packet.getLength();
29         System.out.println(new String(data,0,len));
30         //释放资源
31         server.close();
32     }
33 
34 }

效果截图:

ps:文章待完善,后续会加以修改。

猜你喜欢

转载自www.cnblogs.com/weekstart/p/10826900.html