基于UDP协议的简单聊天程序
2016-10-24 17:04
603 查看
摘要:使用JAVA语言,基于UDP协议,实现了简单UDP聊天程序,在不同主机之间收发信息。
功能:接收用户输入,将信息发送到目标主机的对应端口上,如果目标计算机也运行此程序,会显示信息,并接受目标主机写回信息。
图1 程序UML图
程序实现了三个类,其中UDPSender类与UDPReceiver类实现了Runnable接口,作为独立线程分别实现UDP数据包的发送与接收。UDPSender线程接收用户输入,将其发送到目标主机的制定端口上,UDPReceiver线程从本机的默认端口(由用户设置)上监听到来的信息并显示。UDPClient类启动以上两个线程,并且根据用户的输入建立java.net.DatagramSocket对象,用于以上两个线程收发信息。
在UDPClient中,将java.net.DatagramSocket对象作为参数传递给UDPSender与UDPReceiver,使用Executor执行以上两个线程(上述代码所示)。
在UDPSender中,使用BufferedReader接受用户的输入,创建java.net.DatagramPacket对象存储要发送的数据,并调用java.net.DatagramSocket的send方法将数据发送到目标主机(上述代码所示)。
在UDPSender中,创建空的java.net.DatagramPacket对象存储要接受到的数据,并调用java.net.DatagramSocket的receive方法接受数据, 并显示(上述代码所示)。
1 程序功能
输入:目标主机的IP地址、端口功能:接收用户输入,将信息发送到目标主机的对应端口上,如果目标计算机也运行此程序,会显示信息,并接受目标主机写回信息。
2 程序结构
图1 程序UML图
程序实现了三个类,其中UDPSender类与UDPReceiver类实现了Runnable接口,作为独立线程分别实现UDP数据包的发送与接收。UDPSender线程接收用户输入,将其发送到目标主机的制定端口上,UDPReceiver线程从本机的默认端口(由用户设置)上监听到来的信息并显示。UDPClient类启动以上两个线程,并且根据用户的输入建立java.net.DatagramSocket对象,用于以上两个线程收发信息。
public void start(){ try{ udpSocket = new DatagramSocket(localPort); ExecutorService exec = Executors.newCachedThreadPool(); exec.execute( new UDPSender(udpSocket,remoteHost, remotePort) ); exec.execute( new UDPReceiver(udpSocket) ); Thread.yield(); }catch( SocketException e ){ System.out.println( "Error with creating socket" ); System.exit(0); } }
在UDPClient中,将java.net.DatagramSocket对象作为参数传递给UDPSender与UDPReceiver,使用Executor执行以上两个线程(上述代码所示)。
public void run() { while( !Thread.interrupted() ){ BufferedReader in = new BufferedReader( new InputStreamReader (System.in) ); try { String theLine = in.readLine(); if( theLine.equals("exit") ){ //used for stop UDPReceiver thread udpSocket.close(); break; } byte[] data = theLine.getBytes(); InetAddress ip = InetAddress.getByName(remoteHost); DatagramPacket sendPacket = new DatagramPacket( data, 0, data.length, ip, remotePort); udpSocket.send(sendPacket); Thread.yield(); } catch (IOException e) { System.out.println("IO Exception occured"); } }// end while(36) }
在UDPSender中,使用BufferedReader接受用户的输入,创建java.net.DatagramPacket对象存储要发送的数据,并调用java.net.DatagramSocket的send方法将数据发送到目标主机(上述代码所示)。
public void run(){ //receiver thread is terminate by closing IO resource here, instead of using interrupt. while( !Thread.interrupted() ){ byte[] data = new byte[RB_SIZE]; DatagramPacket recvPacket = new DatagramPacket( data, data.length ); try { udpSocket.receive(recvPacket); //recvPacket.getLength() returns the length of data received String result = new String(recvPacket.getData(), 0, recvPacket.getLength()); String remoteHost = recvPacket.getAddress().getHostAddress(); System.out.println( remoteHost + " says: " + result ); Thread.yield(); } catch (IOException e) { System.out.println("bye"); System.exit(0); } } //end while(24) }
在UDPSender中,创建空的java.net.DatagramPacket对象存储要接受到的数据,并调用java.net.DatagramSocket的receive方法接受数据, 并显示(上述代码所示)。
3 源代码
程序源代码见github:jitianyu/java-udp-talker。参考文献
[1] Harold E R. Java network programming, third edition[M]. O’ReillyMedia, Inc. 2004.相关文章推荐
- JAVA学习第六十课 — UDP协议 &基于多线程模拟简单的QQ聊天程序
- 一个简单的基于udp协议的聊天程序
- 基于UDP协议的简单基本视频传输程序的编写
- 在.net中使用Udp协议创建简单的聊天程序
- 写一个基于UDP协议的聊天小程序
- 基于UDP简单聊天程序
- 在.net中使用Udp协议创建简单的聊天程序
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
- 基于UDP的简单聊天程序
- 基于UDP的简单聊天程序
- 利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)
- Java网络编程 - 基于UDP协议 实现简单的聊天室程序
- 在.net中使用Udp协议创建简单的聊天程序
- 基于MFC对话框的UDP简单聊天程序
- 网络编程与多线程的应用--基于socket udp编写一个简单聊天程序
- 利用TCP和UDP协议,实现基于Socket的小聊天程序
- 基于UDP协议的Java聊天小程序!
- 基于TCP与UDP的简单聊天程序
- Winodws实现基于UDP的简单聊天程序
- 【Java网络编程】UDP协议实例——简单的在线聊天程序