UDP基础(三)

来源:互联网 发布:系统动力学软件 价格 编辑:程序博客网 时间:2024/05/15 03:40
/* 编写一个聊天程序有收数据的部分和发数据的部分这两个部分需要同时执行,那就需要用到多线程技术一个线程控制接收,一个线程控制发送。因为收和发动作不是一致的,所以要定义两个run()方法,而且要封装到不同的类中。*/package com.ifeng.test;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.text.SimpleDateFormat;import java.util.Date;public class UdpChatByThread{public static void main(String[] args)throws Exception{DatagramSocket dsSender = new DatagramSocket();DatagramSocket dsReceiver = new DatagramSocket(10011);new Thread(new Sender(dsSender)).start();new Thread(new Receiver(dsReceiver)).start();}}class Sender implements Runnable{private DatagramSocket socket;public Sender(DatagramSocket socket){this.socket = socket;}public void run(){//由于读入键盘都是字符操作,所有使用BufferedReader,可以使用readLine()方法BufferedReader bufr = null;try{bufr = new BufferedReader(new InputStreamReader(System.in));String line = null;while((line = bufr.readLine())!= null){byte[] buf = line.getBytes();DatagramPacket packet = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10011);socket.send(packet);//当发送886后,发送端退出if("886".equals(line))break;}}catch(Exception e){e.printStackTrace();}finally{try{if(bufr!=null)bufr.close();}catch(IOException ex){ex.printStackTrace();}}socket.close();}}class Receiver implements Runnable{private DatagramSocket socket;private Timer timer;//在初始化Receiver时就要传入DatagramSocketpublic Receiver(DatagramSocket socket){this.socket = socket;}public void run(){try{byte[] buf = new byte[1024];//要让接收端始终开启接收信息while(true){DatagramPacket packet = new DatagramPacket(buf, buf.length);socket.receive(packet);String ip = packet.getAddress().getHostName();String data = new String(packet.getData(), 0, packet.getLength());timer.getTime();System.out.println(ip+": "+data);}}catch(Exception e){e.printStackTrace();}socket.close();}}class Timer {public static void getTime(){Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sf.format(date));}}

原创粉丝点击