UDP小实例(模仿在线咨询)

JAVA学习网 2019-01-30 12:10:04
package cn.lxq.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/*
 * 发送端
 * 1. 使用DatagramSocket 指定端口 创建接收端
 * 2.准备数据一定要转化成字节数组
 * 3.封装成DatagramPacket 目的地 ip+端口
 * 4.发送数据send();
 * 5.释放数据
 */
public class UdpTalkServer implements Runnable{

    private DatagramSocket sender;
    
    private String LoIP;
    
    private int rePort;
    
    private BufferedReader reader;
    
    public UdpTalkServer(int port,String LoIP,int rePort){
        try {
            this.sender=new DatagramSocket(port);
            this.LoIP=LoIP;
            this.rePort=rePort;
            this.reader=new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    @Override
    public void run() {
        while(true)
        {
            String str;
        try {
             //* 2.准备数据一定要转化成字节数组
            str=reader.readLine();
            byte[] datas=str.getBytes();
             //* 3.封装成DatagramPacket 目的地 ip+端口
            DatagramPacket packet=new DatagramPacket(datas, 0,datas.length,new InetSocketAddress(this.LoIP, this.rePort));
             //* 4.发送数据send();
            sender.send(packet);
            
            //发送bye 退出线程
            if(str.equals("bye"))
            {
                break;
            }
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      }    
        sender.close();
    }
}
UdpTalkServer
 1 package cn.lxq.net;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 import java.net.SocketException;
 7 
 8 /*
 9  * 接收端
10  * 1. 使用DatagramSocket 指定端口 创建接收端
11  * 2.准备容器 封装成DatagramPacket包裹
12  * 3.阻塞式接受包裹receive();
13  * 4.分析数据
14  * 5.释放数据
15  */
16 public class UdpTalkClient implements Runnable{
17     
18     private  DatagramSocket receiver;
19     
20     public UdpTalkClient(int port){
21         try {
22             this.receiver=new DatagramSocket(port);
23         } catch (SocketException e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         }
27     }
28 
29     @Override
30     public void run() {
31         while(true)
32         {
33               //* 2.准备容器 封装成DatagramPacket包裹
34               byte[] container=new byte[1024*60];
35               DatagramPacket packet=new DatagramPacket(container, 0,container.length);
36           try {
37             
38              //* 3.阻塞式接受包裹receive();
39             receiver.receive(packet);
40              //* 4.分析数据
41               byte[] datas=packet.getData();
42               int len=packet.getLength();
43               String str=new String(datas,0,len);
44               System.out.println(str);
45               if(str.equals("bye"))
46               {
47                   break;
48               }
49         } catch (IOException e) {
50             // TODO Auto-generated catch block
51             e.printStackTrace();
52         }
53        }
54          //* 5.释放数据
55          receiver.close();
56     }
57 }
UdpTalkClient
 1 package cn.lxq.net;
 2 /*
 3  * 
 4  */
 5 public class TalkTeacher {
 6 
 7     public static void main(String[] args) {
 8            new Thread(new UdpTalkServer(6666, "localhost", 8888)).start();//发送
 9            
10            
11            new Thread(new UdpTalkClient(5555)).start();//接受
12     }
13 
14 }
Teacher
package cn.lxq.net;

public class TalkStudent {

    public static void main(String[] args) {
         
           new Thread(new UdpTalkClient(8888)).start();//接收
           
           new Thread(new UdpTalkServer(9999, "localhost", 5555)).start();//发送
    }

}
Student

 

阅读(2369) 评论(0)