• 最屌网络编程解析


    IP地址

     什么是IP地址:唯一标识网络上的每一台计算机

     IP地址组成:32位,由4个8位二进制数组成。如(127.0.0.1)

     网络地址:标识计算机或网络设备所在的网段

     主机地址:标识特定主机或者网络设备

     (127.0.0.1)红色为网络地址,蓝色为主机地址(0~255)

    查看本机IP地址:cmd--->ipconfig

    测试网络是否畅通:ping  目标IP

     网络通信协议

    为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合

    (仅展示了常用的五层)

    TCP:(Transfer control protocol) 传输控制协议(构建可靠的传输)要求客户端与服务端必须建立连接

    UDP:User Datagram protocol 用户数据报协议(不可靠的协议)客户端与服务端无需建立连接也可传输数据

    三次握手的问题: 1、客户端向服务器发起连接请求   2、服务器接收请求向客户端响应回执   3、客户端真正的与服务端发起连接

    Socket套接字

     通信链路的端点就被称为“套接字”(英文名Socket

     废话不多说,接下来是基于TCP协议实现的编程

    //服务器
    //serverSocket:处理连接请求的Socket
    //Socket才是真正负责数据传递的对象
    public class SocketTest {
        public static void main(String[] args) {
            try {
                  //1:实例化ServerSocket对象 port:指代端口的意思 当前程序在主机上的唯一标识
                ServerSocket server=new ServerSocket(5000);
                  //2:等待客户端发起连接请求(特点:等待客户端请求 如果客户端始终没有发起请求 处于阻塞状态)
                Socket st=server.accept();//监听器
                //通过输入流读取数据
                InputStream is=st.getInputStream();
                BufferedReader br=new BufferedReader(new InputStreamReader(is));
                String info;
                while ((info=br.readLine())!=null) {
                    System.out.println("客户端说:"+info);
                    
                }
                
                //返回数据 输出流
                String str="你说得对";
                OutputStream os=st.getOutputStream();
                BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
                bw.write(str);
                
                        
                //关闭流操作
                bw.close();
                os.close();
                br.close();
                is.close();
                st.close();
                server.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
    //客户端
    public class ScoketKh {
        public static void main(String[] args) {
            try {
                Socket se=new Socket("localhost",5000);//测试的本机地址localhost后面的是端口号
                String st="好好学习,天天向上";
                OutputStream os=se.getOutputStream();
                os.write(st.getBytes());
                
                se.shutdownOutput();
                InputStream is=se.getInputStream();
                BufferedReader br=new BufferedReader(new InputStreamReader(is));
                String info;
                while ((info=br.readLine())!=null) {
                    System.out.println("服务器端说:"+info);
                    
                }
                
                os.close();
                se.close();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }

     利用多线程的方式实现聊天对话

    //服务器
    public class Sever {
        public static void main(String[] args) {
            try {
                ServerSocket sever = new ServerSocket(10000);
                    Socket socket=sever.accept();
                    System.out.println("连接成功");
                    
                    final BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    final PrintWriter pw=new PrintWriter(socket.getOutputStream());
                    final BufferedReader brs=new BufferedReader(new InputStreamReader(System.in));
                    
                    //使用了内部类方式创建线程
                    new Thread(new Runnable() {
                        
                        @Override
                        public void run() {
                            try {
                                while (true) {
                                    System.out.println("服务器说:"+br.readLine());
                                    
                                }
                                
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            
                        }
                    }).start();
                    new Thread(new Runnable() {
                        
                        @Override
                        public void run() {
                            try {
                                while (true) {
                                    String readLine = brs.readLine();
                                    pw.println(readLine);
                                    pw.flush();
                                }
                                
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            
                        }
                    }).start();
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        
        }
    
    }
    //客户端
    public class User1 {
        public static void main(String[] args) {
            try {
                Socket socket=new Socket("127.0.0.1",10000);
                
                final BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                final PrintWriter pw=new PrintWriter(socket.getOutputStream());
                final BufferedReader brs=new BufferedReader(new InputStreamReader(System.in));
                
                
                
                new Thread(new Runnable() {
                    
                    @Override
                    public void run() {
                        try {
                            while (true) {
                                System.out.println("客户端说:"+br.readLine());
                                
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        
                    }
                }).start();
                new Thread(new Runnable() {
                    
                    @Override
                    public void run() {
                        try {
                            while (true) {
                                String readLine = brs.readLine();
                                pw.println(readLine);
                                pw.flush();
                            }
                            
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        
                    }
                }).start();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }

     利用多线程方式传输对象

    //学生类实现Serializable接口表示可以序列化
    public class Student implements Serializable{
        private String name;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public Student() {
            super();
        }
        
    
    }
    //服务器
    public class Server {
        public static void main(String[] args) {
            try {
                ServerSocket server = new ServerSocket(50000);
                while (true) {//每次来一个对象都要创建一个新的线程所以要一直开着服务器
                    Socket socket=server.accept();
                    new Thread(new MyThread(socket)).start();
                    
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        
        }
    
    }
    //线程
    public class MyThread implements Runnable{
        private Socket socket;//把Socket当做属性传入
        public MyThread(Socket socket) {
            super();
            this.socket = socket;
        }
    
        @Override
        public void run() {
            try {
                //读取传入的对象信息
                ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
                //返回给客户端的信息
                PrintWriter pw=new PrintWriter(socket.getOutputStream());
                Student stu = (Student)ois.readObject();
                if(stu!=null){
                    System.out.println(stu.getName()+"	"+stu.getAge());
                    pw.println("已添加一个学员信息");
                    pw.flush();
                }else {
                    System.out.println("没有传输学员信息");
                    pw.println("添加失败");
                    pw.flush();
                }
                
                pw.close();
                ois.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            
        }
    
    }
    //客户端(传入一个有值的对象)
    public class Client {
        public static void main(String[] args) throws Exception {
            Socket socket=new Socket("127.0.0.1",50000);
            
            Student stu=new Student("小明",18);
            ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            oos.writeObject(stu);
            oos.flush();//强制清空缓存区
            System.out.println(br.readLine());
            
            br.close();
            oos.close();
            socket.close();
        }
    
    }
    //客户端2(传入一个无值的)
    public class Client1 {
        public static void main(String[] args) throws Exception {
            Socket socket=new Socket("127.0.0.1",50000);
            
            Student stu=new Student("小明",18);
            ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            oos.writeObject(null);
            oos.flush();
            System.out.println(br.readLine());
            
            br.close();
            oos.close();
            socket.close();
        }
    
    }

     基于UDP实现的网络编程

    //服务器
    public class SocketUdpFwq {
        public static void main(String[] args) {
            byte[] bytes=new byte[1024];
            DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
            try {
                DatagramSocket socket=new DatagramSocket(5000);
                socket.receive(dp);
                String str=new String(dp.getData(),0,dp.getData().length);
                System.out.println("客户端说:"+str);
                
                String str1="在的,您好";
                byte[] bytes1=str1.getBytes();
                SocketAddress sa=dp.getSocketAddress();
                DatagramPacket dp1=new DatagramPacket(bytes1, 0,bytes1.length,sa);
                socket.send(dp1);
                
                
                socket.close();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
    //客户端
    public class SocketUdp {
        public static void main(String[] args) {
            String str="你好,在吗";
            byte[] bytes=str.getBytes();
            try {
                //获取本机的地址
                InetAddress id=InetAddress.getByName("localhost");
                 //指定包要发送的目的地
                DatagramPacket dp=new DatagramPacket(bytes, bytes.length,id,5000);
                DatagramSocket socket=new DatagramSocket() ;
                socket.send(dp);
                
                
                byte[] bytes1=new byte[1024];
                DatagramPacket dp1=new DatagramPacket(bytes1, bytes1.length);
                socket.receive(dp1);
                String str1=new String(dp1.getData(),0,dp1.getData().length);
                System.out.println("服务器说:"+str1);
                
                socket.close();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    
    }
    努力到无能为力,拼搏到感动自己
  • 相关阅读:
    洛谷—— P1196 银河英雄传说
    MySQL练习题参考答案
    January 16 2017 Week 3 Monday
    January 15 2017 Week 3 Sunday
    January 14 2017 Week 2nd Saturday
    January 13 2017 Week 2 Friday
    January 12 2017 Week 2 Thursday
    January 11 2017 Week 2nd Wednesday
    January 10 2017 Week 2nd Tuesday
    January 09 2017 Week 2nd Monday
  • 原文地址:https://www.cnblogs.com/tkzm/p/11045843.html
Copyright © 2020-2023  润新知