zoukankan      html  css  js  c++  java
  • 利用线程分离发送和接受,这样每个客服端都可以分离

    这个代码是用线程实现建立连接

    这样就可以实现发送和接受分离,大家互相不会影响到彼此

    package com.udpcom;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.util.Scanner;
    
    public class SendThread implements Runnable {
        InetAddress ia;
        int port;
        DatagramPacket dp;
        DatagramSocket ds;
    
        Scanner in = new Scanner(System.in);
        public SendThread(InetAddress ia, int port) {
            this.ia = ia;
            this.port = port;
            try {
                ds = new DatagramSocket();
            } catch (SocketException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            do{
            System.out.println("please input here:");
            String str = in.nextLine();
            //包装
            dp = new DatagramPacket(str.getBytes(),str.getBytes().length,ia,port);
            try {
                ds.send(dp);
            } catch (IOException e) {
                e.printStackTrace();
            }   
            }while(true);
        }
    
    }
    
    package com.udpcom;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    
    public class ReceiveThread implements Runnable {
        InetAddress ia;
        int port;
        DatagramPacket dp;
        DatagramSocket ds;  
        byte buff[]=new byte[2014];
        public ReceiveThread(int port) {
            this.port = port;
            dp = new DatagramPacket(buff,2014);
            try {
                ds =new DatagramSocket(port);
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            do {
            try {
                ds.receive(dp);
                System.out.println(new String(dp.getData(),0,dp.getLength()));          
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            }while(true);
    
        }
    
    }
    
    package com.udpcom;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    
    public class ClientA {
        public static void main(String[] args) {
            int port = 20000;
            String ip = "localhost";
            try {
                InetAddress ia = InetAddress.getByName(ip);
                Thread a = new Thread(new SendThread(ia,port));
                Thread b = new Thread(new ReceiveThread(20001));
                b.start();  
                a.start();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
        }
    
    }
    
    
    package com.udpcom;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    
    public class ClientB {
    /**
     * 只要输入对方的地址,加上一个端口号,我就可以发送
     * 根据地址和端口号,包装成为数据报,然后利用套接字发送
     * 发送利用20001 接受用20000端口,错开和另外一个main进程交互
     */
        public static void main(String[] args) {
            int port = 20000;
            String ip = "localhost";
            try {
                InetAddress ia = InetAddress.getByName(ip);
                Thread a = new Thread(new SendThread(ia,20001));
                Thread b = new Thread(new ReceiveThread(port));
                a.start();  
                b.start();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
        }
    
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/mrcharles/p/4731759.html
Copyright © 2011-2022 走看看