JavaSE.20190513.网络编程.

一.网络编程

     1.IP:定义网络上的不同的节点(手机,电脑,路由器...)

        IPV4:32位     IPV6:128位

        非注册IP地址(公司内部使用):192.168.0.0~192.168.255.255

        特殊的IP:

         127.0.0.1    本地IP

         localhost     本地域名

         DNS域名解析器

         java,net类InetAddress 此类标识互联网协议(IP)地址。

         static InetAddress getLocalHost()   返回本地主机

         static InetAddress getByName(String host)在给定主机名的情况下确认主机的IP地址

         

public class IPDemo01 {
	public static void main(String[] args) throws UnknownHostException {
		InetAddress address1=InetAddress.getLocalHost();
		System.out.println(address1);
		
		/*
		 * String getHostAddress() 
		          返回 IP 地址字符串(以文本表现形式)。 
		   String getHostName() 
		          获取此 IP 地址的主机名。 
		 */
		System.out.println(address1.getHostAddress());
		System.out.println(address1.getHostName());
		
		InetAddress address2=InetAddress.getByName("www.baidu.com");
		InetAddress address3=InetAddress.getByName("115.239.211.112");
		System.out.println(address3);  //115.239.211.112
		System.out.println(address3.getHostAddress());  //115.239.211.112
		System.out.println(address3.getHostName());  //115.239.211.112
	}
}

      2.端口:区分软件的

         定义端口   2个字节    0~65535

         相同的协议下端口不能冲突

         端口自定越大越好,8000以上,8000以内预留端口号

         特殊的端口号:

                               80       http

                               8080   tomcat

                               1521   Oracle端口号

                                3306   mysql端口

         INetSocketAddress     此类实现IP套接地址(IP地址+端口号)       

import java.net.InetSocketAddress;

public class PortDemo02 {
	public static void main(String[] args) {
		//InetSocketAddress(String hostname, int port)   根据主机名和端口号创建套接字地址。
		InetSocketAddress i=new InetSocketAddress("127.0.2.1",80);
		
		System.out.println(i);
		/*
		 * InetAddress getAddress() 
		          获取 InetAddress。 
		   String getHostName() 
		          获取 hostname。 
		   int getPort()  获取端口 
		 */
		System.out.println(i.getAddress());
		System.out.println(i.getHostName());
		System.out.println(i.getPort());
		
	}

}

         3.URL:统一资源定位符|器

            互联网的三大基石:http     html   url

http://www.baidu.com:80/index.html?name=zhangsan&age=123#a

协议:http

域名:www.baidu.com

端口:80           默认:80

资源:index.html?name=zhangsan&age=123#a

import java.net.MalformedURLException;
import java.net.URL;

public class URLDemo03 {
	public static void main(String[] args) throws MalformedURLException {
		/*
		 String getFile() 
		          获取此 URL 的文件名。 
		 String getHost() 
		          获取此 URL 的主机名(如果适用)。 
		 String getPath() 
		          获取此 URL 的路径部分。 
		 int getPort() 
		          获取此 URL 的端口号。 
		 String getProtocol() 
		          获取此 URL 的协议名称。 
		 String getQuery() 
		          获取此 URL 的查询部分。 
		 String getRef() 
		          获取此 URL 的锚点(也称为“引用”)。 
		 */
		URL url=new URL("http://www.baidu.com:80/index.html?name=zhangsan&age=123#a");
		System.out.println(url.getFile());
		System.out.println(url.getHost());
		System.out.println(url.getPath());
		System.out.println(url.getPort());
		System.out.println(url.getProtocol());
		System.out.println(url.getQuery());
		System.out.println(url.getRef());
	}

}

       4.协议:规范     合同

          udp:非面向连接的     写信 ,不安全,效率高,协议简单,开销小,大小有限制,一般不超过60k

          tcp:面向连接的    打电话   ,安全,效率低,开销大,

          三次握手:1)拨号       2)回访 :响应      3)发送数据:基于IO穿出数据

          1)应用层如何与传输层进行沟通:

                通过Socket套接字

                面向Socket编程,Socket相当于插座,是两层之间沟通的接口,不同协议,Socket的实现不一样

          2)udp如何实现Socket编程:发送端和接收端是平等的

                DatagramSocket  此类表示用来发送和接收数据报包的套接字

                DatagramSocket (int  port)

                DatagramPacket   此类表示数据报包

          3)UDP基本流程:发送端

                ①创建发送端,指明发送端的端口

                ②准备数据,转为字节数组

                ③吧数据打包,指明接收端的地址和端口号     DatagramPacket

                ④发送数据

                ⑤关闭

public class SendDemo01 {
	public static void main(String[] args) throws IOException {
		System.out.println("----------------发送端--------------");
		//1,创建发送端
		DatagramSocket socket=new DatagramSocket(8888);
		//2.准备数据,转为字节数组
		String str="那些你很冒险的梦";
		byte[] arr=str.getBytes();
		//3.打包  DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 
		DatagramPacket packet=new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9999));
		//4.void send(DatagramPacket p)  从此套接字发送数据报包。
		socket.send(packet);
		//5.关闭
		socket.close();
	}

}

        4)UDP基本流程:接收端    

           ①创建接受端,指明接受端的端口

           ②准备字节数组,用来存储接口收据的

           ③吧字节数组打包

           ④阻塞式接收

           ⑤处理数据

           ⑥关闭

public class ReceiveDemo02 {
	public static void main(String[] args) throws IOException {
		System.out.println("----------------接受端--------------");
		//1.构建接受端,指定接受端端口
		DatagramSocket socket=new DatagramSocket(9999);
		//2.准备字节数组,用来存储接口收据的
		byte[] arr=new byte[1024*60];
		//3.把字节数组打包 DatagramPacket(byte[] buf, int offset, int length) 
		DatagramPacket packet=new DatagramPacket(arr,0,arr.length);
		//4.接收 void receive(DatagramPacket p) 从此套接字接收数据报包。 
		socket.receive(packet);
		/*
		 *  byte[] getData() 返回数据缓冲区。 
		    int getLength() 返回将要发送或接收到的数据的长度。 
		 */
		//5.处理数据
		System.out.println(new String(packet.getData()));
		System.out.println(packet.getLength());
		//6.关闭
		socket.close();
	}
}

        

4)tcp基本流程:服务端    

           ①构建服务端    ServerSocket    指定端口    ServerSocket(int  port)

           ②阻塞式监听   Socket   accept()

           ③一个客户端就是一个socket   IO操作

           ④关闭

public class Server02 {
	public static void main(String[] args) throws IOException {
		System.out.println("------------Server-----------");
		//	1.构建服务端  ServerSocket  指定端口
		ServerSocket server=new ServerSocket(9999);
		// 	2.阻塞式监听
		Socket socket=server.accept();
		System.out.println("一个客户端连接成功");
		// 	3.一个客户端就是一个socket  IO操作
		DataInputStream is=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
		String str=is.readUTF();
		System.out.println(str);
		//  4.关闭
		is.close();
		socket.close();
		server.close();
	}
}

         5)tcp基本流程:客户端
               ①创建客户端  Socket 指定服务端的ip和端口  Socket(String host, int port)
               ②io操作
               ③关闭

public class Client01 {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("------------Client-----------");
		//1.创建客户端  Socket 指定服务端的ip和端口
		Socket client=new Socket("127.0.0.1",9999);
		//2.io操作  OutputStream getOutputStream()    返回此套接字的输出流。 
		DataOutputStream out=new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
		out.writeUTF("name=hangsan&pwd=123");
		//3.关闭
		out.flush();
		out.close();
		client.close();
	}
}

 

 

 

 


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值