zoukankan      html  css  js  c++  java
  • Java 学习之网络编程案例

    网络编程案例

    一,概念

    1,网络编程不等于网站编程

    2,编程只和传输层打交道,即TCP和UDP两个协议

    二,案例

    1,TCP实现点对点的聊天

    Server端:两个输入流:读客户端和控制台,一个输出端:输出客户端

     

    public class ChatServer {
        public static void main(String[] args) {
            try {
                ServerSocket serverSocket=new ServerSocket(44432);
                Socket socket=serverSocket.accept();//获取客户端的连接信息
                BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));//client 的输入内容
                PrintWriter printWriter =new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//往client输出内容
                System.out.println("client say:"+bufferedReader.readLine());
                Scanner bufferedReader1=new Scanner(System.in);//控制台输入内容
                String message=bufferedReader1.next();
                while(!message.equals("end")) {
                    printWriter.println(message);//send message to client
                    printWriter.flush();
                    System.out.println("client say:"+bufferedReader.readLine());// get message from client
                    message=bufferedReader1.next();
                }
                bufferedReader.close();
                printWriter.close();
                bufferedReader1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

     

    Client端:两个输入流:读服务端和控制台,一个输出端:输出服务端

    public class ChatClient {
        public static void main(String[] args) {
            try {
                Socket socket=new Socket("127.0.0.1",44432);//获取服务端的唯一标识
                PrintWriter printWriter=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//BufferedWriter流也可以
                BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                BufferedReader bufferedReader1=new BufferedReader(new InputStreamReader(System.in));
                String message=bufferedReader1.readLine();
                while (!message.equals("end")){
                    printWriter.write(message+"
    ");//加
    ,因为读取时是用readLine方式 ,等同于println方式
                    printWriter.flush();//必须flush,不然另一端读不到。。。
                    System.out.println("server say:"+bufferedReader.readLine());
                    message=bufferedReader1.readLine();
                }
                bufferedReader.close();
                bufferedReader1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    2,UDP 实现高精度数字传输   通过数据报形式

    接收端:

    public class UdpServer {
        public static void main(String[] args) {
            byte[] buf=new byte[1024];//存储接受数据报的容器
            DatagramPacket datagramPacket=new DatagramPacket(buf,buf.length);//数据报内容写入容器
            try {
                DatagramSocket datagramSocket=new DatagramSocket(44423);
                while (true){
                    datagramSocket.receive(datagramPacket);//接收发送方的数据报
                    ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(buf);
                    DataInputStream dataInputStream=new DataInputStream(byteArrayInputStream);
                    System.out.println("clint say:"+dataInputStream.readDouble());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    发送端:

    public class UdpClient {
        public static void main(String[] args) {
            double n=10000.00;
            try {
                ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
                DataOutputStream dataOutputStream=new DataOutputStream(byteArrayOutputStream);
                dataOutputStream.writeDouble(n);
                //创建代有数据报内容和目的地址
                DatagramPacket datagramPacket=new DatagramPacket(byteArrayOutputStream.toByteArray(),
                        byteArrayOutputStream.toByteArray().length,new InetSocketAddress("127.0.0.1",44423));
                DatagramSocket datagramSocket=new DatagramSocket(53421);//指定发送的端口
                datagramSocket.send(datagramPacket);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     

     

     

  • 相关阅读:
    web安全——代理(nginx)
    2016年3-7月书单推荐
    web安全——系统(Linux)
    web安全——防火墙
    web安全——简介
    系统安全扫描工具(appscan)的扫描类型小记
    知识管理,让生活更美好
    亚马逊如何变成 SOA(面向服务的架构)
    徐小平:关了公司以后,我有这些话要对你说
    网易味央第二座猪场落户江西 面积超过3300亩
  • 原文地址:https://www.cnblogs.com/ksWorld/p/6775202.html
Copyright © 2011-2022 走看看