使用JAVA线程写的一个UDP简易通讯程序(三)

来源:互联网 发布:阿里云cdn如何配置 编辑:程序博客网 时间:2024/05/14 21:42

好记性不如赖笔头…………

服务器代码package com.ckinghan.client;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;public class UDPServer implements Runnable{    //接口    private int prot;    //构造方法    public UDPServer(int prot) {        super();        this.prot = prot;    }    @Override    public void run() {        //创建对象        DatagramSocket datagramSocket = null;        try {            //实例化对象            datagramSocket = new DatagramSocket(prot);            //接收最大的字节数(注意UDP最多一次性只能传送64K的数据)            byte[] bs = new byte[1024];            //创建接收传过来的消息对象            DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length);            //提示            System.out.println("服务端已启动:");            //循环接收数据            while (true) {                //接收数据并将数据传给datagramPacket                datagramSocket.receive(datagramPacket);                //获取接收到的字节长度                int len = datagramPacket.getLength();                //获取接收到的消息数据                byte[] message = datagramPacket.getData();                //将接收到的字节转换为字符并指定编码                String getMessage = new String(message, 0, len,"UTF-8");                //获取客户端的IP地址                InetAddress inetAddress = datagramPacket.getAddress();                //如果用户要退出                if("close".equals(getMessage.toLowerCase())){                    break;                }                //输出用户的发送的消息内容                 System.out.println(inetAddress.getHostAddress()+"的用户说:"+getMessage);            }        } catch (SocketException e) {            e.printStackTrace();        }catch (IOException e) {            e.printStackTrace();        }finally {            //关闭流            if(datagramSocket != null){                datagramSocket.close();            }        }    }}
客户端代码package com.ckinghan.client;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;public class UDPClient implements Runnable{    //服务器IP    private String ip;    //通讯接口    private int prot;    //构造 方法    public UDPClient(String ip,int prot) {        super();        this.ip = ip;        this.prot = prot;    }    @Override    public void run() {        //创建对象        DatagramSocket datagramSocket = null;        BufferedReader bufferedReader = null;        try {            //创建IP            InetAddress inetAddress = InetAddress.getByName(ip);            //实例化对象            datagramSocket = new DatagramSocket();            //从控制台接收数据            bufferedReader = new BufferedReader(new InputStreamReader(System.in));            //提示            System.out.println("客户端已启动,等待输入:");            //循环            while (true) {                //接收从控制台输入的数据                String sendMessageByte = bufferedReader.readLine();                //将输入的数据转换字节数组,并指定编码                byte[] bs = sendMessageByte.getBytes("UTF-8");                //创建连接                DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length, inetAddress, prot);                //写入要发送的消息                datagramPacket.setData(bs);                //发送消息                datagramSocket.send(datagramPacket);                //如果用户要退出                if("close".equals(new String(sendMessageByte).toLowerCase())){                    break;                }            }        } catch (SocketException e) {            e.printStackTrace();        } catch (java.net.UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            //关闭流            if(datagramSocket != null)                datagramSocket.close();            if(bufferedReader != null){                try {                    bufferedReader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

启动代码 1

package com.ckinghan.client;public class StartThread {    public static void main(String[] args) {        //创建服务器对象并指定端口        UDPServer udpServer = new UDPServer( 10001);        //创建客户端对象,并指定服务器地址、端口        UDPClient udpClient = new UDPClient("192.168.0.124", 10000);        //创建线程        Thread server = new Thread(udpServer);        Thread client = new Thread(udpClient);        //启动线程        server.start();        client.start();    }}

启动二

package com.ckinghan.client;public class StartThread {    public static void main(String[] args) {        //创建服务器对象并指定端口        UDPServer udpServer = new UDPServer( 10000);        //创建客户端对象,并指定服务器地址、端口        UDPClient udpClient = new UDPClient("192.168.0.124", 10001);        //创建线程        Thread server = new Thread(udpServer);        Thread client = new Thread(udpClient);        //启动线程        server.start();        client.start();    }}
原创粉丝点击