- package com.itheima;
- /*
- * 编写一个聊天程序,接收数据2部分
- * 这两部分需要同时执行,so多线程
- * 因为收和发动作是不一致的,所以要定义2个run方法
- * 而且这两个方法要封装到不同的类中
- *
- *
- * */
- 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;
- import java.net.UnknownHostException;
- public class UdpTxet {
- public static void main(String[] args) throws SocketException{
- DatagramSocket sendSocket = new DatagramSocket();
- DatagramSocket receSocket = new DatagramSocket(10009);
-
- new Thread(new UdpSend(sendSocket)).start();
- new Thread(new UdpRece(receSocket)).start();
- }
- }
- class UdpSend implements Runnable {
- private DatagramSocket ds;
- public UdpSend(DatagramSocket ds){
- this.ds = ds;
- }
- public void run(){
- try {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String line = null;
- while((line=br.readLine())!=null){
- if("886".equals(line))//将判断语句也发过去,当接收端接受到就跳出while循环,
- {
- byte[] data = line.getBytes();
- DatagramPacket dp = new DatagramPacket(data,data.length,
- InetAddress.getByName("127.0.0.1"),10009);
- ds.send(dp);
- break;
- }
-
-
- byte[] data = line.getBytes();
- DatagramPacket dp = new DatagramPacket(data,data.length,
- InetAddress.getByName("127.0.0.1"),10009);
- ds.send(dp);
-
-
- }
- ds.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- class UdpRece implements Runnable {
- private DatagramSocket ds;
- public UdpRece(DatagramSocket ds){
- this.ds = ds;
- }
- public void run(){
- try{
- while(true){
- byte[] buf = new byte[1024];
- DatagramPacket dp = new DatagramPacket(buf,buf.length);
- ds.receive(dp);
- String ip = dp.getAddress().getHostAddress();
- String data = new String(dp.getData(),0,dp.getLength());
- System.out.println("Ip = "+ip+" "+data);
- if("886".equals(data))//加入判断语句,跳出循环
- break ;//
- }
- }
- catch(Exception e){
- throw new RuntimeException("接收数据失败");
- }
- ds.close();
- }
- }
复制代码 |