zoukankan      html  css  js  c++  java
  • 网络编程丶

    计算机网络

    img

    TCP:打电话

    • 连接,稳定
    • 三次握手,四次挥手
    • 客户端,服务端
    • 传输完成,释放连接,效率低

    UDP:发短信

    • 不连接,不稳定
    • 客户端,服务端,无明确界限
    • DDOS:饱和攻击

    TCP实现聊天

    客户端

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    //客户端
    public class TcpClientDemo01 {
        public static void main(String[] args) {
            Socket socket = null;
            OutputStream os = null;
            try {
                InetAddress serverIP = InetAddress.getByName("127.0.0.1");
                int port = 9999;
                socket = new Socket(serverIP, port);
                os = socket.getOutputStream();
                os.write("hi world".getBytes());
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != socket) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    服务端

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //服务端
    public class TcpServerDemo01 {
        public static void main(String[] args) {
            ServerSocket serverSocket = null;
            Socket accept = null;
            InputStream is = null;
            try {
                serverSocket = new ServerSocket(9999);
                while (true) {
                    //死循环 等待客户端连接过来
                    accept = serverSocket.accept();
                    is = accept.getInputStream();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len;
                    while (-1 != (len = is.read(buffer))) {
                        baos.write(buffer, 0, len);
                    }
                    System.out.println(baos.toString());
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != is) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != accept) {
                    try {
                        accept.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != serverSocket) {
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    TCP实现文件上传

    客户端

    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    //客户端
    public class TcpClientDemo02 {
        public static void main(String[] args) {
            Socket socket = null;
            OutputStream os = null;
            InputStream inputStream = null;
            ByteArrayOutputStream baos = null;
            try {
                socket = new Socket(InetAddress.getByName("127.0.0.1"), 9999);
                os = socket.getOutputStream();
                //读取文件 父工程的根目录下
                FileInputStream fis = new FileInputStream(new File("tb.jpg"));//管道流
                //写出文件
                byte[] buffer = new byte[1024];
                int len;
                while (-1 != (len = fis.read(buffer))) {
                    os.write(buffer, 0, len);
                }
                //通知服务器,我已经结束了
                socket.shutdownOutput();
                //确定服务器接收完毕,断开连接
                inputStream = socket.getInputStream();//阻塞式监听
                baos = new ByteArrayOutputStream();//各种类型的管道流供选择
                byte[] buffer2 = new byte[1024];
                int len2;
                while (-1 != (len2 = inputStream.read(buffer2))) {
                    baos.write(buffer2, 0, len2);
                }
                System.out.println(baos.toString());
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != baos) {
                    try {
                        baos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != inputStream) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != socket) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    服务端

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //服务端
    public class TcpServerDemo02 {
        public static void main(String[] args) {
            ServerSocket serverSocket = null;
            Socket accept = null;
            InputStream is = null;
            FileOutputStream fos = null;
            OutputStream os = null;
            try {
                serverSocket = new ServerSocket(9999);
                accept = serverSocket.accept();//阻塞式监听
                //等待客户端连接过来
                is = accept.getInputStream();
                //把流写到服务器
                fos = new FileOutputStream(new File("receive.jpg"));
                byte[] buffer = new byte[1024];
                int len;
                while (-1 != (len = is.read(buffer))) {
                    fos.write(buffer, 0, len);
                }
                //通知客户端 我接收完毕了
                os = accept.getOutputStream();
                os.write("我接收完毕了,你可以断开了".getBytes());
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != fos) {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != is) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != accept) {
                    try {
                        accept.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != serverSocket) {
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    UDP实现消息发送

    发送端

    import java.net.*;
    
    public class UdpSendDemo01 {
        public static void main(String[] args) throws Exception {
            //1.建立一个socket
            DatagramSocket socket = new DatagramSocket();
    
            String msg = "你好啊,接收端";
            InetAddress address = InetAddress.getByName("localhost");
            int port = 9090;
    
            DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, address, port);
    
            socket.send(packet);
    
            socket.close();
        }
    }
    

    接收端

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class UdpReciveDemo01 {
        public static void main(String[] args) throws Exception {
            
            DatagramSocket socket = new DatagramSocket(9090);
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
    
            socket.receive(packet);//阻塞接收
    
            System.out.println(new String(packet.getData(), 0, packet.getLength()));
    
            socket.close();
        }
    }
    

    UDP实现消息循环发送

    发送方

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.InetSocketAddress;
    
    public class UdpSendDemo02 {
        public static void main(String[] args) throws Exception {
            //1.建立一个socket
            DatagramSocket socket = new DatagramSocket(8888);
    
            //准备数据,控制台读取 System.in
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            while (true) {
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));
                socket.send(packet);
                if (data.equals("bye")) {
                    break;
                }
            }
    
            socket.close();
        }
    }
    

    接收方

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class UdpReciveDemo02 {
        public static void main(String[] args) throws Exception {
    
            DatagramSocket socket = new DatagramSocket(6666);
    
            while (true) {
                byte[] container = new byte[1024];
                DatagramPacket packet = new DatagramPacket(container, 0, container.length);
                socket.receive(packet);//阻塞式接收包裹
    
                byte[] data = packet.getData();
                String receiveData = new String(data, 0, data.length);
    
                System.out.println(receiveData);
    
                if (receiveData.equals("bye")) {
                    break;
                }
            }
            socket.close();
        }
    }
    

    UDP实现消息互发

    发送器

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    import java.net.SocketException;
    
    public class TalkSend implements Runnable {
        DatagramSocket socket = null;
        BufferedReader reader = null;
    
        private int fromPort;
        private String toIP;
        private int toPort;
    
        public TalkSend(int fromPort, String toIP, int toPort) {
            this.fromPort = fromPort;
            this.toIP = toIP;
            this.toPort = toPort;
    
            try {
                socket = new DatagramSocket(fromPort);
                reader = new BufferedReader(new InputStreamReader(System.in));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
    
            while (true) {
                try {
                    String data = reader.readLine();
                    byte[] datas = data.getBytes();
                    DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIP, this.toPort));
                    socket.send(packet);
                    if (data.equals("bye")) {
                        break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    

    接收器

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class TalkReceive implements Runnable{
        DatagramSocket socket = null;
    
        private int port;
        private String msgFrom;
    
        public TalkReceive(int port,String msgFrom) {
            this.port = port;
            this.msgFrom = msgFrom;
            try {
                socket = new DatagramSocket(port);
            } catch (SocketException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            while (true) {
                try {
                    byte[] container = new byte[1024];
                    DatagramPacket packet = new DatagramPacket(container, 0, container.length);
                    socket.receive(packet);//阻塞式接收包裹
                    byte[] data = packet.getData();
                    String receiveData = new String(data, 0, data.length);
    
                    System.out.println(this.msgFrom+":"+receiveData);
    
                    if (receiveData.equals("bye")) {
                        break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    

    角色一

    public class TalkStudent {
        public static void main(String[] args) {
            new Thread(new TalkSend(7777, "localhost", 9999)).start();
            new Thread(new TalkReceive(8888, "老师")).start();
        }
    }
    

    角色二

    public class TalkTeacher {
        public static void main(String[] args) {
            new Thread(new TalkSend(5555, "localhost", 8888)).start();
            new Thread(new TalkReceive(9999,"学生")).start();
        }
    }
    

    URL下载网络资源

    下载网上的文件资源

    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class UrlDown {
        public static void main(String[] args) throws Exception {
            URL url = new URL("https://m10.music.126.net/20201104154250/187b2743b01dbfa7e8d1bc1460c8d81e/yyaac/005c/540c/0659/76d554a876cf0882482013c77516ef93.m4a");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            FileOutputStream fos = new FileOutputStream("3.m4a");
    
            byte[] buffer = new byte[1024];
            int len;
            while (-1 != (len = inputStream.read(buffer))) {
                fos.write(buffer, 0, len);
            }
    
            fos.close();
            inputStream.close();
            urlConnection.disconnect();
        }
    }
    
    击石乃有火,不击元无烟!!
  • 相关阅读:
    数据预处理 --Sklearn preprocessing的理解
    平衡二叉树的插入旋转
    二叉树
    malloc/free 与 new/delete的区别
    C/C++ const总结
    C/C++ static总结
    C++未定义行为
    c++虚函数表
    visual studio mfc中 cout 输出
    ERROR C4996 UNSAFE
  • 原文地址:https://www.cnblogs.com/rain2020/p/13926268.html
Copyright © 2011-2022 走看看