知识大全 利用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数据库编程中查询结果的输出 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 利用Java开
Java语言编程必备十大技能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 作为一个语言编程技术
JAVA编程语言开发下载文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [java] /*
JAVA编程语言程序开发平方 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [java] pa
JAVA编程语言开发DES算法理论 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [java]
Java编程语言中的口令屏蔽 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 目前对于Java命令
知识大全 马上要毕业了,想学习java软件编程方面的东西,报哪个培训学校靠谱些
马上要毕业了,想学习java软件编程方面的东西,报哪个培训学校靠谱些?不夸专业学习java吗?如果是建议先自学,在考虑培训哦!这个学校很不错的,我高中三个同学都是在这里学的java。想在大连学习jav
Java语言深入--什么叫面向接口编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在一个面向
Java编程语言的认识误区 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 越来越多人开始使用Ja
JAVA语言编程中如何使用表达式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JAVA正则表达