选择显示字体大小

利用java语言实现数据报编程之单播


  实际上,单播就是一个报文从源主机向另一个目标主机发送,接收目标只有一个。
  首先,写收发器类datagramrecvsender_s,这个类既要发送数据报又要接收数据报,发送一个文件夹中的所有图片,一张一张的进行,接收是在一个线程中进行,每收完一个文件,就激活一个事件,事件处理器处理这个事件。
  类清单为:
package recmail.multiservice;
import java.net.datagrampacket;
import java.net.datagramsocket;
import java.net.socketexception;
import java.net.socketaddress;
import java.net.unknownhostexception;
import java.net..netsocketaddress;
import java.io.ioexception;
import java.util.arraylist;
import java.net..netaddress;
import java.io.file;
import java.util.iterator;
public class datagramrecvsender_s extends dataswaplisteneradapter
implements runnable {
  public
static final int datagramport = 10698;
  private java.net.datagramsocket
road ;
  private .netaddress ia;
  datagrampacket dp;
  public static final int datagram_length = 8192;
  private datapacket cdp;
  private boolean ishandling = true;
  dataswapevent dsevent;
  /**
  * 这个构造器用于接收数据报.
  */
  public datagramrecvsender_s() {
   try {
    system.out.println("recv ...");
    ia = .netaddress.getbyname("localhost");//192.168.0.17"127.0.0.1"
    dsevent = new dataswapevent(this);
    socketaddress sa = new .netsocketaddress(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 ex1) {
    ex1.printstacktrace();
   }
  }
  /**
  * 这个构造器用于发送数据报.
  * @param
send string
  */
  public datagramrecvsender_s(string send) {
   try {
    system.out.println("start sending ...");
    ia = .netaddress.getbyname("192.168.0.4");//"255.255.255.255""192.168.0.4""127.0.0.1"
    dsevent = new dataswapevent(this);
    socketaddress sa = new .netsocketaddress(ia,
    datagramrecvsender_s.datagramport);
    //如果需要接收数据报,就需要指定一个端口,否则不必指定.road = new datagramsocket(datagramrecvsender_s.datagramport-1);
    road = new datagramsocket();
    system.out.println("isbound--"+road.isbound()+":getbroadcast--"+road.getbroadcast());
   }
   catch (socketexception ex) {
    ex.printstacktrace();
   }
   catch (unknownhostexception ex1) {
    ex1.printstacktrace();
   }
  }
  public void sendfile(string file) {
   cdp = new datapacket(file);
   system.out.println(file);
   iterator it = cdp.getdatapackets().iterator();
   byte[] b;
   while (it.hasnext()) {
    b = ( (dataentry) it.next()).getbyte();
    //数据报是自包含的,自描述的数据,它的投递是由路由器执行的,路由器路由算法根据报文的目标地址选择适当的路由递送报文,
    //所以数据报中要指定目标ip地址和目标主机处理端口.
    datagrampacket dp = new datagrampacket(b, 0, b.length, ia,datagramrecvsender_s.datagramport);
    try {
     thread.
sleep (100);
     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=0;j <1000;j++)
    for (int i = 0; i < file.length; i++) {
     try {
      thread.sleep(2000);
     }
     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(5, 5));
   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.ex
it_on_close);
   frame.setsize(300, 200);
   frame.validate();
   frame.setvisible(true);
  }
}


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons