zoukankan      html  css  js  c++  java
  • 滴水穿石-13 网络编程

    1 UPD协议发送和接收

    1.1 基础版

    package d13;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
    /*
     * 创建stock对象
     * 打包数据
     * 发送数据
     * 释放数据
     * */
    public class UDP_Send {
        public static void main(String[] args) throws Exception {
            //01 创建对象
            DatagramSocket ds = new DatagramSocket();
            //02 打包数据  DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
            byte [] contentStr = "Hello Word !!".getBytes();
            int lengthInt = contentStr.length;
            InetAddress ip =  InetAddress.getByName("192.168.2.117");
            int portInt = 10086;
            DatagramPacket dp = new DatagramPacket(contentStr,lengthInt,ip,portInt);
            //03 发送数据
            ds.send(dp);
            //04 释放资源
            ds.close();
        }
        
    }
    UDP_Send
    package d13;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
    /*
     * 创建stock对象
     * 创建数据包对象
     * 接收数据
     * 解析数据
     * 释放数据
     * */
    public class UDP_Receive {
        public static void main(String[] args) throws Exception {
            //01 创建对象
            int portInt = 10086;
            DatagramSocket ds = new DatagramSocket(portInt);
            //02 打包数据  DatagramPacket(byte[] buf, int length) 
            byte[] buf = new byte[1024];
            int lengthInt = 1024;    
            DatagramPacket dp = new DatagramPacket(buf,lengthInt);
            
            //03 发送数据
            ds.receive(dp);
            //04 解析数据
            String ip = dp.getAddress().getHostAddress();
            byte[] contentByte = dp.getData();
            int len = dp.getLength();
            String strContent = new String(contentByte,0,len); 
            System.out.println(ip+": "+strContent);
            //05 释放资源
            ds.close();
        }
        
    }
    UDP_Receive

    1.2 改进版,键盘录入

    package d13;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
    /*
     * 创建stock对象
     * 打包数据
     * 发送数据
     * 释放数据
     * */
    public class UDP_Send {
        public static void main(String[] args) throws Exception {
            //01 创建对象
            DatagramSocket ds = new DatagramSocket();
            //02 打包数据  DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            while ((line = br.readLine()) != null) {
                if ("886".equals(line)) {
                    break;
                }  
                byte [] contentStr =line.getBytes();
                int lengthInt = contentStr.length;
                InetAddress ip =  InetAddress.getByName("192.168.2.117");
                int portInt = 10086;
                DatagramPacket dp = new DatagramPacket(contentStr,lengthInt,ip,portInt);
                //03 发送数据
                ds.send(dp);
            }
             
            //04 释放资源
            ds.close();
        }
        
    }
    UDP_Send2.0

    2 TCP协议发送和接收数据

    2.1 基础版

    package d13;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /*TCP协议发送数据:
     * A:创建发送端的Stock
     * B:获取输出流,写数据
     * C:释放资源
     * */
    public class TCP_Client {
    
        public static void main(String[] args) throws Exception {
            // A:创建发送端的Stock
            Socket s = new Socket("192.168.2.117",10087);
            //B:获取输出流,写数据
            OutputStream os = s.getOutputStream();
            os.write("Hello Word !!".getBytes());
            //释放资源
            s.close();
        }
    
    }
    TCP_Client
    package d13;
    
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     *创建服务端的Socket对象
     *监听客户端连接,返回一个Socket对象
     *获取输入流 并显示在控制台
     *释放资源
     * */
    public class TCP_Server {
        public static void main(String[] args) throws Exception {
            //创建服务端的Socket对象
                    ServerSocket s = new ServerSocket(10087);
                    //监听客户端连接,返回一个Socket对象
                    Socket ss = s.accept();
                    //获取输入流 并显示在控制台
                    InputStream is = ss.getInputStream();
                    
                    byte [] bys = new byte[1024];
                    int len = is.read(bys);
                    String str = new String(bys,0,len);
                    String ip = ss.getInetAddress().getHostAddress();
                    System.out.println(ip+": "+str);
                     
                    //释放资源
                    ss.close();
        }
     
    }
    TCP_Server

    2.2 服务器端收到消息后反馈给客户端

    package d13;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /*TCP协议发送数据:
     * A:创建发送端的Stock
     * B:获取输出流,写数据
     * C:释放资源
     * */
    public class TCP_Client {
    
        public static void main(String[] args) throws Exception {
            // A:创建发送端的Stock
            Socket s = new Socket("192.168.2.117",10087);
            //B:获取输出流,写数据
            OutputStream os = s.getOutputStream();
            os.write("Hello Word !!".getBytes());
            //C 接收服务器端发送来的数据
            InputStream is = s.getInputStream();
            byte [] by = new byte[1024];
            int len = is.read(by);
            String ms=new String(by,0,len);
            
            System.out.println(ms);
            //释放资源
            s.close();
        }
    
    }
    TCP_Client
    package d13;
    
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     *创建服务端的Socket对象
     *监听客户端连接,返回一个Socket对象
     *获取输入流 并显示在控制台
     *释放资源
     * */
    public class TCP_Server {
        public static void main(String[] args) throws Exception {
            //创建服务端的Socket对象
                    ServerSocket s = new ServerSocket(10087);
                    //监听客户端连接,返回一个Socket对象
                    Socket ss = s.accept();
                    //获取输入流 并显示在控制台
                    InputStream is = ss.getInputStream();
                    
                    byte [] bys = new byte[1024];
                    int len = is.read(bys);
                    String str = new String(bys,0,len);
                    String ip = ss.getInetAddress().getHostAddress();
                    System.out.println(ip+": "+str);
                     
                    //创建输出流,将消息反馈给客户端
                    OutputStream os = ss.getOutputStream();
                    os.write("信息已收到!!".getBytes());
                    //释放资源
                    ss.close();
        }
     
    }
    TCP_Server

    2.3 键盘录入+高效流

    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /*TCP协议发送数据:
     * A:创建发送端的Stock
     * B:获取输出流,写数据
     * C:释放资源
     * */
    public class TCP_Client {
    
        public static void main(String[] args) throws Exception {
            // A:创建发送端的Stock
            Socket s = new Socket("192.168.2.117",10087);
            //B:获取输出流,写数据
            OutputStream os = s.getOutputStream();
            //键盘录入数据
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            //把通道内的流给包装一下
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            String line =null;
            while ((line=br.readLine())!=null) {
                if ("886".equals(line)) {
                    break;
                }
                bw.write(line);
                bw.newLine();
                bw.flush();
                 
            }
              
            //释放资源
         
            s.close();
        }
    
    }
    TCP_Client
    package d13;
    
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     *创建服务端的Socket对象
     *监听客户端连接,返回一个Socket对象
     *获取输入流 并显示在控制台
     *释放资源
     * */
    public class TCP_Server {
        public static void main(String[] args) throws Exception {
                    //创建服务端的Socket对象
                    ServerSocket ss = new ServerSocket(10087);
                    //监听客户端连接,返回一个Socket对象
                    Socket s = ss.accept();
                    //获取输入流 并显示在控制台
                    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                    String line = null;
                    while ((line=br.readLine())!=null) {
                        //String ip = ss.getInetAddress().getHostAddress();
                        System.out.println(line);
                    }
                 
                     
                    //释放资源
                    s.close();
        }
     
    }
    TCP_Server

     2.4 键盘录入+输出到文本文件

    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    
    /*
     * 客户端键盘录入,服务器输出到文本文件*/
    public class TCP_Client2 {
        public static void main(String[] args) throws IOException {
            //创建客户端Socket对象
            Socket s = new Socket("192.168.2.117",23466);
            //键盘录入
            BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
            //封装通道内的数据
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            
            String line =null;
            while ((line=br.readLine())!=null) {
                if ("over".equals(line)) {
                    break;
                }
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
            s.close();
        }
    }
    TCP_Client2
    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /*
     * 客户端键盘录入,服务器输出到文本文件*/
    public class TCP_Server2 {
        public static void main(String[] args) throws IOException {
            //创建服务器Socket对象
            ServerSocket ss = new ServerSocket(23466);
            
            //监听客户端创建
            Socket s = ss.accept();
            
            //从通道中来到文件中去
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //封装文本文件
            BufferedWriter bw = new BufferedWriter (new FileWriter("b.txt"));
            String line = null;
            while ((line=br.readLine())!=null) {
                 bw.write(line);
                 bw.newLine();
                 bw.flush();
            }
            bw.close();
        }
    }
    TCP_Server2

    2.5 文本文件录入+控制台输出

    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /*
     * 读取文本文件,输出到控制台*/
    public class TCP_Client3 {
        public static void main(String[] args) throws IOException {
            //创建Socket对象
            Socket s = new Socket("192.168.2.117",10087);
            
            //封装文本文件
            BufferedReader br = new BufferedReader(new FileReader("b.txt"));
            //封装通道内的流
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            
            String line = null;
                    
            while ((line = br.readLine())!=null) {
                bw.write(line);
                bw.newLine();
                bw.flush();    
            }
            br.close();
            s.close();
            
        }
    }
    TCP_Client3
    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCP_Server3 {
    
        public static void main(String[] args) throws IOException {
            //创建服务器对象
            ServerSocket ss = new ServerSocket(10087);
            //监听客户端
            Socket s = ss.accept();
            //从通道中来
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //到控制台
            String line = null;
            while ((line=br.readLine())!=null) {
                 System.out.println(line);
            }
            s.close();
        }
    
    }
    TCP_Server3

    2.6 文本文件录入+文本文件输出

    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class TCP_Client4 {
    
        public static void main(String[] args) throws IOException {
            // 创建Socket对象
            Socket s = new Socket("192.168.2.117", 10088);
            // 创建读取流
            BufferedReader br = new BufferedReader(new FileReader("b.txt"));
            // 创建文件输出流
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            String line = null;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
            //Socket通知服务器,已经结束了
            bw.write("over");
            s.shutdownOutput();
            // 接收反馈
            BufferedReader brclient = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String msg = brclient.readLine();
            System.out.println(msg);
            // 释放资源
            br.close();
            s.close();
    
        }
    
    }
    TCP_Client4
    package d13;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCP_Server4 {
        public static void main(String[] args) throws IOException {
             //创建服务器对象
            ServerSocket ss = new ServerSocket(10088);
            //创建监听
            Socket s = ss.accept();
            //从通道中来
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //到文件中
            BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
            
            String line = null;
            while ((line=br.readLine())!=null) {
                 
                bw.write(line);
                bw.newLine();
                bw.flush();
                
            }
            //发出成功消息
            BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bwServer.write("文件上传成功");
            bwServer.newLine();
            bwServer.flush();
            //bwServer.close();
            //释放资源
            bw.close();
            s.close();
        }
    }
    TCP_Server4

     2.7 图片文件录入+图片文件输出

    package d13;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //上传图片,并保存
    public class TCP_Client5 {
        public static void main(String[] args) throws IOException {
            //创建Socket对象
            Socket s = new Socket("192.168.2.117", 10090);
            //读取图片图片
            BufferedInputStream bi = new BufferedInputStream(new FileInputStream("a.png"));
            byte [] by = new byte[1024];
            //向通道中写数据
            BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());
            int len =0;
            
            while ((len=bi.read(by))>0) {
                bo.write(by,0,len);        
                bo.flush();
            }
            //通知服务器传输结束
            s.shutdownOutput();
            
            //结束服务器传来的反馈
            InputStream biServer =  s.getInputStream();
            len= biServer.read(by);
            String msg =new String(by,0,len);
            System.out.println(msg);
             
            s.close();
            
        }
    }
    TCP_Client5
    package d13;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCP_Server5 {
        public static void main(String[] args) throws IOException {
            // 创建服务端Socket
            ServerSocket ss = new ServerSocket(10090);
            // 监听客户端
            Socket s = ss.accept();
            // 从通道中来
            BufferedInputStream bi = new BufferedInputStream(s.getInputStream());
            // 到文件中去
            byte [] by = new byte[1024];
            BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("b.png"));
            int len =0;
            while ((len=bi.read(by))!=-1) {
                bo.write(by,0,len);
            }
            //给客户端个反馈
            OutputStream bs = s.getOutputStream();
            bs.write("图片上传成功!".getBytes()); 
            bo.close();
            s.close();
        }
    }
    TCP_Server5

     3 一个服务器+多个客户端(多线程)

    package d13;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCP_Server5 {
        public static void main(String[] args) throws IOException {
            // 创建服务端Socket
            ServerSocket ss = new ServerSocket(10090);
            while (true) {
                // 监听客户端
                Socket s = ss.accept();
                  new Thread(new UserThread(s)).start();    
            }
            
        }
    }
    TCP_Server5
    package d13;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class UserThread implements Runnable {
    
        private Socket s;
        public UserThread(Socket s) {
            this.s=s;
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                // 从通道中来
                BufferedInputStream bi = new BufferedInputStream(s.getInputStream());
                // 到文件中去
                byte [] by = new byte[1024];
                String newName =System.currentTimeMillis()+".png";
                BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(newName));
                int len =0;
                while ((len=bi.read(by))!=-1) {
                    bo.write(by,0,len);
                }
                //给客户端个反馈
                OutputStream bs = s.getOutputStream();
                bs.write("图片上传成功!".getBytes()); 
                bo.close();
                s.close();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    
    }
    UserThread
    package d13;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //上传图片,并保存
    public class TCP_Client5 {
        public static void main(String[] args) throws IOException {
            //创建Socket对象
            Socket s = new Socket("192.168.2.117", 10090);
            //读取图片图片
            BufferedInputStream bi = new BufferedInputStream(new FileInputStream("a.png"));
            byte [] by = new byte[1024];
            //向通道中写数据
            BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());
            int len =0;
            
            while ((len=bi.read(by))>0) {
                bo.write(by,0,len);        
                bo.flush();
            }
            //通知服务器传输结束
            s.shutdownOutput();
            
            //结束服务器传来的反馈
            InputStream biServer =  s.getInputStream();
            len= biServer.read(by);
            String msg =new String(by,0,len);
            System.out.println(msg);
             
            s.close();
            
        }
    }
    TCP_Client5
  • 相关阅读:
    关于gc日志中Desired Survivor的疑问和对象晋升老年代的小结
    Tomcat 中部署 web 应用 ---- Dubbo 服务消费者 Web 应用 war 包的部署
    10种常见的排序算法
    让我们来谈谈JDBC
    单例的设计模式
    使用putty与SSHSecureShellClient登录远程服务器完成与本地Git项目的同步
    安装 Dubbo 管理控制台
    邮件工具类
    Hadoop系列教程<一>---Hadoop是什么呢?
    setTimeout闭包常见问题
  • 原文地址:https://www.cnblogs.com/YK2012/p/8732748.html
Copyright © 2011-2022 走看看