【java基础:net】基于多线程的UDP发送和接收的聊天Demonstration
2017-11-22 00:27
447 查看
第一部分:发送端
第二部分:接收端
package net.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /* * 需求:创建一个发送端的线程,该线程的数据来源于键盘。 */ public class Send implements Runnable { DatagramSocket ds=null; public Send(DatagramSocket ds) { super(); this.ds = ds; } @Override public void run() { try { //从键盘中获取数据 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str=null; while((str=br.readLine())!=null) { //创建一个数据包,IP地址可自行设置,以255结尾的地址将会发送至1-254所有点的接收端(即发送给以192.168.1.1开始的所有点)。 DatagramPacket dp=new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName("192.168.1.255"),20000); ds.send(dp); if(str.equals("886")) { break; } } ds.close(); } catch(Exception e){ // } } }
第二部分:接收端
package net.chat; import java.net.DatagramPacket; import java.net.DatagramSocket; /* * 需求:接收UDP数据包并显示。 */ public class Receive implements Runnable { DatagramSocket ds=null; public Receive(DatagramSocket ds) { super(); this.ds = ds; } @Override public void run() { try { //不断地接收数据包 while(true) { byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,buf.length); ds.receive(dp);//阻塞式!! //接下来是解析数据包中的信息,需要知道:ip地址,发送端的端口号,发送的内容。 String ip=dp.getAddress().getHostName(); String text=new String(dp.getData(),0,dp.getLength()); int port=dp.getPort(); System.out.println("ip地址:"+ip+"\n"+"发送端端口号:"+port+"\n"+"内容:"+text); if(text.equals("886")){ System.out.println(ip+":"+port+"....退出聊天室"); } } } catch (Exception e) { // TODO: handle exception } } }第三部分:主程序
package net.chat; import java.net.DatagramSocket; import java.net.SocketException; /* * 创建两个分别用于发送和接收的Socket,并且为发送和接收启动两个不同的线程。 */ public class Chat { public static void main(String[] args) throws SocketException { DatagramSocket send=new DatagramSocket(2017); DatagramSocket rece=new DatagramSocket(20000); new Thread(new Send(send)).start(); new Thread(new Receive(rece)).start(); } }
相关文章推荐
- 【java基础:net】基于多线程的TCP图片上传客户端与服务端Demonstration
- JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天
- JAVA基础再回首(二十八)——网络编程概述、IP地址、端口号、TCP和UDP协议、Socket、UDP传输、多线程UDP聊天
- JAVA学习第六十课 — UDP协议 &基于多线程模拟简单的QQ聊天程序
- VB.net基础:使用UDP发送和接收消息
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- 【java基础:net】基于TCP的客户端与服务端进行字母大小写转换的Demonstration
- 【java基础:net】基于TCP的文本文件上传Demonstration
- Java基础—socket编程—UDP发送及接收
- Java基础——实现UDP发送数据和接收数据
- Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据
- 【java基础:net】基于TCP的客户端与服务端Demonstration
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- 黑马程序员-JAVA学习之用多线程实现简单UDP聊天程序
- 基于java实现的UDP多用户聊天应用
- Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
- C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送
- 黑马程序员_Java基础_网络编程_UDP传输协议编程,控制台聊天程序
- Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
- linux下基于udp的简单的接收与发送程序,开发板与本机接收与发送信息