网络编程_UDP案例_在线咨询
2019-02-24 18:01
225 查看
不管什么数据类型:基本数据类型、引用数据类型、文件,只要能够转成字节数组,都能够通过UDP发送出去、接收过来。当然,这里内容不能太大【60k】,太大了还是接不了。
(1)、
package com.sxt.udp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; /** * 多次交流: 发送端 * 1、使用DatagramSocket 指定端口 创建发送端 * 2、准备数据 一定转成字节数组 * 3、 封装成DatagramPacket 包裹,需要指定目的地 * 4、发送包裹send(DatagramPacket p) * * 5、释放资源 * @author * */ public class UdpTalkClient { public static void main(String[] args) throws Exception { System.out.println("发送方启动中....."); // 1、使用DatagramSocket 指定端口 创建发送端 DatagramSocket client =new DatagramSocket(8888); //2、准备数据 一定转成字节数组 BufferedReader reader =new BufferedReader(new InputStreamReader(System.in)); while(true) { String data = reader.readLine(); byte[] datas = data.getBytes(); //3、 封装成DatagramPacket 包裹,需要指定目的地 DatagramPacket packet =new DatagramPacket(datas,0,datas.length, new InetSocketAddress("localhost",6666)); //4、发送包裹send(DatagramPacket p) * client.send(packet); if(data.equals("bye")) { break; } } // 5、释放资源 client.close(); } } package com.sxt.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * 多次交流: 接收端 * Address already in use: Cannot bind 同一个协议下端口不允许冲突 * 1、使用DatagramSocket 指定端口 创建接收端 * 2、准备容器 封装成DatagramPacket 包裹 * 3、阻塞式接收包裹receive(DatagramPacket p) * 4、分析数据 * byte[] getData() * getLength() * 5、释放资源 * @author * */ public class UdpTalkServer { public static void main(String[] args) throws Exception { System.out.println("接收方启动中....."); // 1、使用DatagramSocket 指定端口 创建接收端 DatagramSocket server =new DatagramSocket(6666); while(true) { // 2、准备容器 封装成DatagramPacket 包裹 byte[] container =new byte[1024*60]; DatagramPacket packet = new DatagramPacket(container,0,container.length); // 3、阻塞式接收包裹receive(DatagramPacket p) server.receive(packet); //阻塞式 // 4、分析数据 // byte[] getData() // getLength() byte[] datas =packet.getData(); int len = packet.getLength(); String data=new String(datas,0,len); System.out.println(data); if(data.equals("bye")) { break; } } // 5、释放资源 server.close(); } }
(2)、
package com.sxt.udp; 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; /** * 发送端: 使用面向对象封装(所谓的使用面向对象封装,无非就是加入属性,加入方法,加入构造器, * 然后再玩类跟类的关系,接口、继承,最后再玩设计模式) * * @author * */ public class TalkSend implements Runnable { private DatagramSocket client ; private BufferedReader reader; private String toIP ; private int toPort ; public TalkSend(int port,String toIP,int toPort) { this.toIP = toIP; this.toPort=toPort; try { client=new DatagramSocket(port); reader =new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while(true) { String data; try { data = reader.readLine(); byte[] datas = data.getBytes(); //3、 封装成DatagramPacket 包裹,需要指定目的地 DatagramPacket packet =new DatagramPacket(datas,0,datas.length, new InetSocketAddress(this.toIP,this.toPort)); //4、发送包裹send(DatagramPacket p) * client.send(packet); if(data.equals("bye")) { break; } } catch (IOException e) { e.printStackTrace(); } } // 5、释放资源 client.close(); } } package com.sxt.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * 接收端: 使用面向对象封装(所谓的使用面向对象封装,无非就是加入属性,加入方法,加入构造器, * 然后再玩类跟类的关系,接口、继承,最后再玩设计模式) * * @author * */ public class TalkReceive implements Runnable { private DatagramSocket server ; private String from ; public TalkReceive(int port,String from) { this.from = from ; try { server=new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while(true) { // 2、准备容器 封装成DatagramPacket 包裹 byte[] container =new byte[1024*60]; DatagramPacket packet = new DatagramPacket(container,0,container.length); // 3、阻塞式接收包裹receive(DatagramPacket p) try { server.receive(packet);//阻塞式 // 4、分析数据 byte[] datas =packet.getData(); int len = packet.getLength(); String data=new String(datas,0,len); System.out.println(from+":"+data); if(data.equals("bye")) { break; } } catch (IOException e) { e.printStackTrace(); } } // 5、释放资源 server.close(); } }
(3)、
package com.sxt.udp; /** * 加入多线程,实现双向交流 模拟在线咨询 * * @author * */ public class TalkStudent { public static void main(String[] args) { new Thread(new TalkSend(7777,"localhost",9999)).start(); //发送 new Thread(new TalkReceive(8888,"老师")).start(); //接收 } } package com.sxt.udp; /** * 加入多线程,实现双向交流 模拟在线咨询 * * @author * */ public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkReceive(9999,"学生")).start(); //接收 new Thread(new TalkSend(5555,"localhost",8888)).start(); //发送 } }
再次强调UDP编程在后期的开发中属于底层开发,叫网络编程不叫网页编程,
相关文章推荐
- Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例
- 【Java网络编程】UDP协议实例——简单的在线聊天程序
- 《java入门第一季》之UDP协议下的网络编程小案例
- Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例
- 《java入门第一季》之UDP协议下的网络编程小案例
- JAVA网络编程UDP案例
- JAVA网络编程UDP案例
- 网络编程作业 UDP (客户与咨询通话)
- Java学习笔记52(网络编程:UDP协议案例)
- (99)网络编程:IP地址类、DatagramSocket(UDP)、DatagramPacket
- 基于UDP协议的C#网络编程
- linux网络编程之UDP
- Java网络编程——基于UDP的Socket编程
- 网络通信中标志通信进程、TCP三次握手四次撒手、TCP与UDP在socket编程中的区别
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- 关于JAVA网络编程UDP和TCP(上)
- 关于网络编程中MTU、TCP、UDP优化配置的一些总结
- Java 网络编程之 (UDP网络聊天程序)
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- 【黑马程序员】黑马入学准备篇:网络编程之 TCP、UDP和Socket综合实例