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

     

     

     

  • 相关阅读:
    java SE连接mysql
    ubuntu_linux窗口显示文件路径方法Ctrl+L
    android studio安卓连接mysql数据库方法
    Java打开文件
    创建指定大小、指定数量的文件
    Java动态内存占用
    vite2 + vue3 开发组件库
    smallbin double linked list corrupted
    qt多线程信号槽传参不是继承QObject可能导致信号槽连接 无效 正常情况会直接报错
    postman tests常用脚本
  • 原文地址:https://www.cnblogs.com/ksWorld/p/6775202.html
Copyright © 2020-2023  润新知