java UDP双向通信,在线聊天
来源:原创
时间:2019-10-18
作者:脚本小站
分类:其他
client:
package com.qiyang.client; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class Client { private static Scanner scanner; public static void main(String[] args) { System.out.println("【client online】"); DatagramSocket ds = null; try { ds = new DatagramSocket(8888); while (true) { String str = send(ds, "localhost", 9999);// 发送 if ("bye".equals(str)) { System.out.println("client offline"); break; } receive(ds);//接收 } } catch (IOException e) { e.printStackTrace(); } finally { ds.close(); } } // 发送消息 private static String send(DatagramSocket ds, String ip, int port) throws IOException { scanner = new Scanner(System.in); System.out.print("client say:"); String str = scanner.next(); byte[] b = str.getBytes(); InetAddress address = InetAddress.getByName(ip); DatagramPacket dp = new DatagramPacket(b, b.length, address, port); ds.send(dp);//发送 return str; } // 接收消息 private static void receive(DatagramSocket ds) throws IOException { byte[] b = new byte[1024]; DatagramPacket dp = new DatagramPacket(b, b.length); ds.receive(dp); //处理接收到的数据 String str = new String(dp.getData(),0,dp.getLength()); System.out.println("server say:"+str); } }
Server:
package com.qiyang.server; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class Server { private static Scanner scanner; public static void main(String[] args) { System.out.println("【server online】"); DatagramSocket ds = null; try { ds = new DatagramSocket(9999); while (true) { String str = receive(ds);//接收 if ("bye".equals(str)) { System.out.println("server offline"); break; } send(ds, "localhost", 8888);// 回复 } } catch (IOException e) { e.printStackTrace(); }finally { ds.close(); } } // 接收消息 private static String receive(DatagramSocket ds) throws IOException { byte[] b = new byte[1024]; DatagramPacket dp = new DatagramPacket(b, b.length); ds.receive(dp); //处理接收到的数据 String str = new String(dp.getData(),0,dp.getLength()); System.out.println("client say:"+str); return str; } // 回复消息 private static void send(DatagramSocket ds, String ip, int port) throws IOException { scanner = new Scanner(System.in); System.out.print("server say:"); String str = scanner.next(); byte[] b = str.getBytes(); InetAddress address = InetAddress.getByName(ip); DatagramPacket dp = new DatagramPacket(b, b.length, address, port); ds.send(dp);//发送 } }