就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换
OSI 参考模型
应用层: 主要是一些终端的应用, 比如 FTP(各种文件下载),web(IE 浏览),QQ 之类的
表示层: 主要是进行对接收的数据进行解释, 加密与解密, 压缩与解压缩 (也就是把计算机能够识别的东西转换成人能识别的东西, 如图片, 声音等)
会话层: 通过传输层简历数据传输的通路. 主要在你的系统之间发起会话或者接收会话请求 (设备之间需要互相认识可以是 IP 也可以是 MAC 或者是主机名)
网络层: 主要从下层接收到的数据进行 IP 地址的封装与解封装, 这一层数据叫数据包
数据链路层: 主要将从下层接收到的数据进行 MAC 地址的封装与解封装. 这一层数据叫帧. 在这一层工作的设备叫交换机, 数据通过交换机来传输
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- public class InetAddressDemo {
- public static void main(String[] args) throws UnknownHostException {
- InetAddress address = InetAddress.getByName("192.168.2.121");
- String name = address.getHostName();
- String ip = address.getHostAddress();
- System.out.println(name + "----" + ip);
- }
- }
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- /*
- * UDP 协议接收数据:
- * A: 创建接收端 Socket 对象
- * B: 创建数据包 (接收容器)
- * C: 调用 Socket 对象的接收方法接收数据
- * D: 解析数据包并显示在控制台
- * E: 释放资源
- * */
- public class ReceiveDemo {
- public static void main(String[] args) throws IOException {
- DatagramSocket ds = new DatagramSocket(10086);
- byte[] bys= new byte[1024];
- DatagramPacket dp = new DatagramPacket(bys,bys.length);
- ds.receive(dp);
- // 解析数据
- System.out.println(dp.getAddress().getHostAddress() + ":" + new String(dp.getData(),0,dp.getLength()));
- ds.close();
- }
- }
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /*
- * UDP 协议发送数据:
- * A: 创建发送端 Socket 对象
- * B: 创建数据, 并把数据打包
- * C: 调用 Socket 对象的发送方法发送数据包
- * D: 释放资源
- * */
- public class SendDemo {
- public static void main(String[] args) throws IOException {
- DatagramSocket ds = new DatagramSocket();
- byte[] bys = "hello,udp, 我来了".getBytes();
- DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.2.121"),10086);
- ds.send(dp);
- ds.close();
- }
- }
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- /*
- * UDP 协议接收数据:
- * A: 创建接收端 Socket 对象
- * B: 创建数据包 (接收容器)
- * C: 调用 Socket 对象的接收方法接收数据
- * D: 解析数据包并显示在控制台
- * E: 释放资源
- * */
- public class ReceiveDemo {
- public static void main(String[] args) throws IOException {
- DatagramSocket ds = new DatagramSocket(10086);
- while (true) {
- byte[] bys = new byte[1024];
- DatagramPacket dp = new DatagramPacket(bys, bys.length);
- ds.receive(dp);
- // 解析数据
- System.out.println(dp.getAddress().getHostAddress() + ":" + new String(dp.getData(), 0, dp.getLength()));
- }
- }
- }
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /*
- * 数据来自于键盘录入
- *
- * */
- public class SendDemo {
- public static void main(String[] args) throws IOException {
- DatagramSocket ds = new DatagramSocket();
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String line = null;
- while((line = br.readLine())!=null){
- if("886".equals(line))
- break;
- byte[] bys = line.getBytes();
- DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.2.121"),10086);
- ds.send(dp);
- }
- ds.close();
- }
- }
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- /*
- * TCP 协议接收数据:
- * A: 创建接收端的 Socket 对象
- * B: 监听客户端连接, 返回一个对应的 Socket 对象
- * C: 获取输入流, 读取数据显示在控制台
- * D: 释放资源
- *
- * */
- public class ServerDemo {
- public static void main(String[] args) throws IOException{
- ServerSocket ss = new ServerSocket(8888);
- // 监听客户端连接
- Socket st = ss.accept();
- InputStream is = st.getInputStream();
- byte[] bys = new byte[1024];
- System.out.println(st.getInetAddress().getHostAddress()+":"+new String(bys,0,is.read(bys)));
- st.close();
- //ss.close(); 这个不应该关闭
- }
- }
- import java.io.IOException;
- import java.io.OutputStream;
- import java.net.Socket;
- /*
- * TCP 协议发送数据:
- * A: 创建发送端的 Socket 对象
- * 这一步如果成功, 就说明连接已经建立成功
- * B: 获取输出流, 写数据
- * C: 释放资源
- * TCP 协议一定要先开服务器
- *
- * */
- public class ClientDemo {
- public static void main(String[] args) throws IOException {
- Socket st = new Socket("192.168.2.121", 8888);
- OutputStream os = st.getOutputStream();
- os.write("hello,tcp, 我来了".getBytes());
- st.close();
- }
- }
来源: http://www.bubuko.com/infodetail-2769088.html