电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
Java数据报编程之单播-JSP教程,数据库相关
作者:网友供稿 点击:33
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
 

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

首先,写收发器类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.inetsocketaddress;
import java.io.ioexception;
import java.util.arraylist;
import java.net.inetaddress;
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 inetaddress 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 = inetaddress.getbyname("localhost");//192.168.0.17"127.0.0.1"
      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 ex1) {
      ex1.printstacktrace();
    }
  }
  /**
   * 这个构造器用于发送数据报.
   * @param send string
   */
  public datagramrecvsender_s(string send) {
    try {
      system.out.println("start sending ...");
      ia = inetaddress.getbyname("192.168.0.4");//"255.255.255.255""192.168.0.4""127.0.0.1"
      dsevent = new dataswapevent(this);
      socketaddress sa = new inetsocketaddress(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.exit_on_close);
    frame.setsize(300, 200);
    frame.validate();
    frame.setvisible(true);
  }
}


下一篇介绍广播的实现.


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号