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();
            }
        }
    }

     

     

     

  • 相关阅读:
    XML(学习笔记)
    css样式学习笔记
    Request(对象)
    sql一些错误修改的总结
    转载(如何学习C#)
    sql server(学习笔记2 W3Cschool)
    sql sqrver(学习笔记1 W3Cschool)
    关于 flutter开发碰到的各种问题,有的已经解决有的一直没解决或者用其他方法替代
    关于 Flutter IOS build It appears that your application still contains the default signing identifier.
    关于 flutter本地化问题 The getter 'pasteButtonLabel' was called on null
  • 原文地址:https://www.cnblogs.com/ksWorld/p/6775202.html
Copyright © 2011-2022 走看看