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();
            }
        }
    
    }
    
  • 相关阅读:
    高德地图之 鼠标移进移出时 图标的改变
    高德地图之--海外地图
    angular表单验证
    angularJs 页面加载页面
    angularJs tab样式切换方法之一
    资源
    JavaScript规范
    H5 用 iScroll实现上拉加载 下拉刷新的功能
    ionic项目之极光推送--通知
    Day6 function
  • 原文地址:https://www.cnblogs.com/mrcharles/p/11879945.html
Copyright © 2011-2022 走看看