当前位置 博文首页 > 文章内容

    [Java基础] 网络编程

    作者: 栏目:未分类 时间:2020-08-16 14:00:01

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    一:TCP/IP模型

      OSI参考模型为七个层面:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层;

      TCP/IP模型将这七个层面简化成四个层面:前三个层面简化成了:应用层,最后两个层面简化成了:网络接口层;

    二:TCP/UDP

      TCP协议:是一种面向连接,可靠的,基于字节流的传输层通讯协议,数据大小无限制,建立连接和断开连接需要三次握手四次挥手,是一种长连接

      UDP协议:是一种无连接的传输层协议,提供面向事务的简单不可靠信息传输服务,每个包的大小为64KB

    三:IP/PORT

      IP是一个分配给互联网设备的唯一标识,port是一部设备的端口,一般来讲8000以内的端口都被设备的硬件软件服务给占领了

      而一组IP和port能确定一个唯一的连接,IP确定设备,port确定数据的传输端口

    四:Socket/ServerSocket

      Client类

      

    /**
     * 
     */
    package SocketDemo;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.util.Scanner;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * @description:
     * @author Lzzy
     * @date 2020年8月12日
     *
     */
    public class Client {
        public static void main(String[] args) {
            try {
    
                Socket s = new Socket("127.0.0.1", 8808);
                // 写的run() 当写入exit时向对方写入一个exit告知要结束交流
                Runnable write = () -> {
    
                    while (true) {
                        OutputStream os = null;
                        try {
                            os = s.getOutputStream();
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                        Scanner input = new Scanner(System.in);
                        String str = input.nextLine();
    
                        if (str.equals("exit")) {
                            try {
    
                                os.write("exit".getBytes());
                                os.flush();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            input.close();
                            break;
    
                        } else {
    
                            try {
                                os.write(str.getBytes());
                                os.flush();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
    
                            // TODO Auto-generated catch block
    
                        }
    
                    }
                };
                // 读的run()方法,当读到了exit后结束此方法
                Runnable read = () -> {
                    while (true) {
                        InputStream is = null;
                        try {
                            is = s.getInputStream();
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                        byte c[] = new byte[1024];
                        try {
    
                            is.read(c);
                            if (!new String(c).trim().equals("exit")) {
                                System.out.println(new String(c));
                            } else {
    
                                break;
                            }
    
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
    
                        }
    
                    }
                };
                ExecutorService es = Executors.newFixedThreadPool(2);
                es.submit(read);
                es.submit(write);
    
                es.shutdown();
                while (es.isTerminated()) {
    
                    s.close();
    
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

      Server类

      

    /**
     * 
     */
    package SocketDemo;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * @description:
     * @author Lzzy
     * @date 2020年8月12日
     *
     */
    public class Server {
    
        public static void main(String[] args) {
            try {
    
                ServerSocket ss = new ServerSocket(8808);
                Socket s = ss.accept();
                System.out.println("一个连接进入...");
                // 写的run() 当写入exit时向对方写入一个exit告知要结束交流
                Runnable write = () -> {
                    while (true) {
                        OutputStream os = null;
                        try {
                            os = s.getOutputStream();
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                        Scanner input = new Scanner(System.in);
                        String str = input.nextLine();
                        if (str.equals("exit")) {
    
                            input.close();
                            try {
                                os.write("exit".getBytes());
                                os.flush();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            break;
    
                        } else {
                            try {
    
                                os.write(str.getBytes());
                                os.flush();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                            }
                        }
                    }
                };
                // 读的run()方法,当读到了exit后结束此方法
                Runnable read = () -> {
                    while (true) {
    
                        byte c[] = new byte[1024];
                        try {
                            InputStream is = s.getInputStream();
    
                            is.read(c);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
    
                        }
                        if (!new String(c).trim().equals("exit")) {
                            System.out.println(new String(c));
                        } else {
    
                            break;
                        }
                    }
                };
                ExecutorService es = Executors.newFixedThreadPool(2);
                es.submit(read);
                es.submit(write);
    
                es.shutdown();
                while (es.isTerminated()) {
    
                    s.close();
                    ss.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }