浅谈Java中的网络编程

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来.

java中提供了java.net包,其中包含类和接口.它们提供低层次的通信细节.我们可以直接使用这些类和接口,专门解决问题.

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

java.net包中提供了两种常见的网络协议的支持:

UDP: 用户数据报协议的缩写.非面向连接 , 不安全, 协议简单,开销小,效率高, 大小有限制,一般不超过60k

TCP:面向连接, 安全,效率低 . 基于3次握手: 1.拨号 2.响应,连接上 3.发送数据

2.UDP

1.UDP实现基本流程: 发送端

使用DatagramSocket指定端口,创建发送端

准备数据 一定要转成字节数组

封装成DatagramPacket包裹

发送包裹send(DatagramPacket p)

释放资源

发送端示例1:

import java.net.DatagramPacket;
        import java.net.DatagramSocket;
        import java.net.InetSocketAddress;
        public class UDPSend1 {
        	public static void main(String[] args) throws Exception {
        		System.out.println("发送方启动中...");
        		// 1.使用DatagramSocket指定端口,创建发送端
        		DatagramSocket client = new DatagramSocket(6666);
        		// 2.准备数据 一定要转成字节数组
        		String data = "落霞与孤鹜齐飞,秋水共长天一色";
        		byte[] datas = data.getBytes();
        		// 3.封装成DatagramPacket包裹
        		DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 8888));
        		// 4.发送包裹send(DatagramPacket p)
        		client.send(packet);
        		// 5.释放资源
        		client.close();
        	}
        }
复制代码

2.UDP实现基本流程: 接收端

使用DatagramSocket指定端口,创建接收端

准备容器,封装成DatagramPacket包裹

阻塞式接收包裹receive(DatagramPacket p)

分析数据

释放资源

接收端示例1:

import java.net.DatagramPacket;
        import java.net.DatagramSocket;
        public class UDPReceive1 {
    	public static void main(String[] args) throws Exception {
    		System.out.println("接收端准备中.... ");
    		// 1.使用DatagramSocket指定端口,创建接收端
    		DatagramSocket server = new DatagramSocket(8888);
    		// 2.准备容器,封装成DatagramPacket包裹
    		byte[] container = new byte[1024 * 60];
    		DatagramPacket packet = new DatagramPacket(container, 0, container.length);
    		// 3.阻塞式接收包裹receive(DatagramPacket p)
    		server.receive(packet);
    		// 4.分析数据
    		byte[] datas = packet.getData();
    		int len = packet.getLength();
    		System.out.println(new String(datas, 0, len));
    		// 5.释放资源
    		server.close();
    	}
    }
复制代码

3.TCP

1.TCP实现基本流程:客户端

定义客户端 Socket Socket(String host, int port) 创建一个流套接字连接到指定主机上的指定端口号

准备数据

写出 IO操作

释放资源

客户端示例2:

import java.io.DataOutputStream;
        import java.io.IOException;
        import java.net.Socket;
        import java.net.UnknownHostException;
        public class Client01 {
    	public static void main(String[] args) throws UnknownHostException, IOException {
    		System.out.println("-------------Client-----------");
    		//1.定义客户端 Socket  Socket(String host, int port)
    		Socket client=new Socket("127.0.0.1",7777);
    		//2.准备数据
    		String str="name=zhangsan&pwd=123";
    		//3.写出  直接从管道中获取流
    		DataOutputStream data=new DataOutputStream(client.getOutputStream());
    		data.writeUTF(str);
    		data.flush();
    		//4.关闭
    		data.close();
    		client.close();
    	}
    }
复制代码

2.TCP实现基本流程:服务端

定义服务端 ServerSocket ServerSocket(int port) 创建一个服务器套接字绑定到指定端口

阻塞式监听 Socket accept()

监听连接套接字并接受它

io操作

释放资源

服务端示例2:

import java.io.DataInputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server01 {
    	public static void main(String[] args) throws IOException {
    		System.out.println("-------------Server-----------");
    		//1.定义服务端
    		ServerSocket server=new ServerSocket(7777);
    		//2.阻塞式监听  Socket accept() 
    		Socket client=server.accept();
    		//3.io操作,直接从管道中获得流
    		DataInputStream in=new DataInputStream( client.getInputStream());
    		String str=in.readUTF();
    		System.out.println(str);
    		//4.释放资源
    		in.close();
    		client.close();
    		server.close();
    	}
    }	
复制代码

原文 

https://juejin.im/post/5dc4291be51d4558a646586e

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 浅谈Java中的网络编程

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址