知识大全 利用Java语言实现数据报编程之单播

Posted

篇首语:蹉跎莫遣韶光老,人生唯有读书好。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 利用Java语言实现数据报编程之单播相关的知识,希望对你有一定的参考价值。

利用Java语言实现数据报编程之单播  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  实际上 单播就是一个报文从源主机向另一个目标主机发送 接收目标只有一个

  首先 写收发器类DatagramRecvSender_s 这个类既要发送数据报又要接收数据报 发送一个文件夹中的所有图片 一张一张的进行 接收是在一个线程中进行 每收完一个文件 就激活一个事件 事件处理器处理这个事件

  类清单为:

  package recmail multiservice;

  import DatagramPacket;

  import DatagramSocket;

  import SocketException;

  import SocketAddress;

  import UnknownHostException;

  import InetSocketAddress;

  import java io IOException;

  import java util ArrayList;

  import InetAddress;

  import java io File;

  import java util Iterator;

  public class DatagramRecvSender_s extends DataSwapListenerAdapter

  implements Runnable

  public static final int DatagramPort = ;

  private DatagramSocket road;

  private InetAddress ia;

  DatagramPacket dp;

  public static final int Datagram_Length = ;

  private DataPacket cdp;

  private boolean ishandling = true;

  DataSwapEvent dsevent;

  /**

  * 这个构造器用于接收数据报

  */

  public DatagramRecvSender_s()

  try

  System out println( recv );

  ia = InetAddress getByName( localhost );//

  dsevent = new DataSwapEvent(this);

  SocketAddress sa = new InetSocketAddress(ia

  DatagramRecvSender_s DatagramPort);

  //至少要指定数据报接收端口 这是对接收端的唯一要求 当然如果主机是多址主机 需要road = new DatagramSocket(sa);

  road = new DatagramSocket(DatagramRecvSender_s DatagramPort);

  System out println(road isBound()+ :: +road getBroadcast());

  

  catch (SocketException ex)

  ex printStackTrace();

  

  catch (Exception ex )

  ex printStackTrace();

  

  

  /**

  * 这个构造器用于发送数据报

  * @param send String

  */

  public DatagramRecvSender_s(String send)

  try

  System out println( start sending );

  ia = InetAddress getByName( );//

  dsevent = new DataSwapEvent(this);

  SocketAddress sa = new InetSocketAddress(ia

  DatagramRecvSender_s DatagramPort);

  //如果需要接收数据报 就需要指定一个端口 否则不必指定 road = new DatagramSocket(DatagramRecvSender_s DatagramPort );

  road = new DatagramSocket();

  System out println( isBound +road isBound()+ :getBroadcast +road getBroadcast());

  

  catch (SocketException ex)

  ex printStackTrace();

  

  catch (UnknownHostException ex )

  ex printStackTrace();

  

  

  public void sendFile(String file)

  cdp = new DataPacket(file);

  System out println(file);

  Iterator it = cdp getDataPackets(erator();

  byte[] b;

  while (it hasNext())

  b = ( (DataEntry) it next()) getByte();

  //数据报是自包含的 自描述的数据 它的投递是由路由器执行的 路由器路由算法根据报文的目标地址选择适当的路由递送报文

  //所以数据报中要指定目标IP地址和目标主机处理端口

  DatagramPacket dp = new DatagramPacket(b b length ia DatagramRecvSender_s DatagramPort);

  try

  Thread sleep( );

  if(dp==null)

  continue;

  road send(dp);

  

  catch (Exception ex)

  ex printStackTrace();

  

  

  

  public boolean isHandling()

  return ishandling;

  

  public void isHandling(boolean ishand)

  ishandling = ishand;

  

  public void run()

  byte[] buffer = new byte[DataPacket DataSwapSize];

  DatagramPacket packet = new DatagramPacket(buffer buffer length);

  DataPacket dp = new DataPacket();

  while (ishandling)

  packet setLength(buffer length);

  System out println( wait );

  try

  road receive(packet);

  dp Add(packet getData());

  if (dp isFull())

  dsevent setImage(dp Gereratedata());

  this processRecvFinishedEvent(dsevent);

  dp = new DataPacket();

  

  

  catch (IOException ex)

  System out println(ex);

  

  

  

  public static void main(String[] args)

  String file[];

  ArrayList al = new ArrayList();

  String path = E:\\nature\\ ;

  File f = new File(path);

  file = f list();

  DatagramRecvSender_s dgrs = new DatagramRecvSender_s( );

  for(int j= ;j< ;j++)

  for (int i = ; i < file length; i++)

  try

  Thread sleep( );

  

  catch (InterruptedException ex)

  

  if (file[i] endsWith( jpg ) || file[i] endsWith( bmp ))

  dgrs sendFile(path + file[i]);

  

  

  

  下面看接收端的界面

  package recmail multiservice;

  import java awt BorderLayout;

  public class testDual

  extends DualWindow implements DataSwapListener

  JImagePanel ip;

  java awt Image bi;

  public testDual()

  public void init()

  super init();

  ImageShow is = new ImageShow();

  is addDataSwapListener(this);

  Thread thread = new Thread(is test );

  thread start();

  

  public static void main(String[] args)

  testDual test = new testDual();

  test initmain();

  test go();

  DatagramRecvSender_s dgrs = new DatagramRecvSender_s();

  dgrs addDataSwapListener(test);

  Thread thread = new Thread(dgrs test );

  thread start();

  

  public void initmain()

  super initmain();

  ip = new JImagePanel();

  root setLayout(new BorderLayout( ));

  root add(ip BorderLayout CENTER);

  

  public void OnDataSendFinished(Object s DataSwapEvent e)

  public void OnDataRecvFinished(Object s DataSwapEvent e)

  this bi = e getImage();

  ip setImage(bi);

  System out println( recv Finished! );

  

  

  testDual扩展的DualWindow类清单:

  package recmail multiservice;

  import javax swing JPanel;

  import javax swing JFrame;

  import javax swing JApplet;

  public class DualWindow

  extends JApplet

  protected JPanel root;

  private JFrame frame;

  public DualWindow()

  public void init()

  root = new JPanel();

  this setContentPane(root);

  

  public void initmain()

  root = new JPanel();

  

  public static void main(String[] args)

  testDual test = new testDual();

  test initmain();

  test start();

  test go();

  

  public void go()

  frame = new JFrame();

  frame setContentPane(root);

  frame setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);

  frame setSize( );

  frame validate();

  frame setVisible(true);

  

cha138/Article/program/Java/hx/201311/25587

相关参考

知识大全 Java数据库编程中查询结果的输出

Java数据库编程中查询结果的输出  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用Java开

知识大全 Java语言编程必备十大技能

Java语言编程必备十大技能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为一个语言编程技术

知识大全 JAVA编程语言开发下载文件

JAVA编程语言开发下载文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [java]  /*

知识大全 JAVA编程语言程序开发平方

JAVA编程语言程序开发平方  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [java]  pa

知识大全 JAVA编程语言开发DES算法理论

JAVA编程语言开发DES算法理论  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [java] 

知识大全 Java 编程语言中的口令屏蔽

Java编程语言中的口令屏蔽  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目前对于Java命令

知识大全 马上要毕业了,想学习java软件编程方面的东西,报哪个培训学校靠谱些

马上要毕业了,想学习java软件编程方面的东西,报哪个培训学校靠谱些?不夸专业学习java吗?如果是建议先自学,在考虑培训哦!这个学校很不错的,我高中三个同学都是在这里学的java。想在大连学习jav

知识大全 Java语言深入--什么叫面向接口编程

Java语言深入--什么叫面向接口编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在一个面向

知识大全 Java编程语言的认识误区

Java编程语言的认识误区  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  越来越多人开始使用Ja

知识大全 JAVA语言编程中如何使用表达式

JAVA语言编程中如何使用表达式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA正则表达