佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1640|回复: 12

Java Multicast packet 太大

[复制链接]
发表于 9-6-2010 03:57 AM | 显示全部楼层 |阅读模式
本帖最后由 nick_khor 于 9-6-2010 08:50 AM 编辑

写了个用 Multicast 来发送 desktop print screen 的programme. 却在发送 packet 的时候不成功,原因是packet size太大了。
  1. java.net.SocketException: The message is larger than the maximum supported by the underlying transport: Datagram send failed
复制代码
请问有什么更好的方法来压缩我的packet。
是从 BufferedImage 下手 还是从 DatagramPacket 下手呢??
请指点.
  1. try {
  2.   Robot robot = new Robot();
  3.   BufferedImage bufferedImage = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
  4.   ByteArrayOutputStream baos = new ByteArrayOutputStream();
  5.   ImageIO.write(bufferedImage, "jpeg", baos);
  6.   byte[] baoss = baos.toByteArray();
  7.   System.out.println(baoss.length); //THIS LENGTH IS VERY HUGE!!!
  8.                                 
  9.   InetAddress multicastAddress = InetAddress.getByName("224.5.6.7");
  10.   socket = new MulticastSocket(6789);
  11.   DatagramPacket sendPacket = new DatagramPacket(baoss,baoss.length,multicastAddress,6789);
  12.   socket.send(sendPacket); //PACKET CANNOT BE SEND OUT
  13. }

  14. catch (AWTException e) {
  15.   e.printStackTrace();
  16. }

  17. catch (IOException e) {
  18.   e.printStackTrace();
  19. }
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 9-6-2010 06:21 PM | 显示全部楼层
1) Resize the file.
2) 用java.util.zip把文件zip了才send.
3) 改configuration 的maximum send limit.
回复

使用道具 举报

发表于 9-6-2010 11:58 PM | 显示全部楼层
JPEG  改去 GIF 吧 , 应该 SIZE 会 更小 。
回复

使用道具 举报

 楼主| 发表于 10-6-2010 10:07 AM | 显示全部楼层
谢谢
我会尝试的
过后再回来update
回复

使用道具 举报

发表于 13-6-2010 09:10 PM | 显示全部楼层
比较有效的方法就是把data split成多个packets。不过,需要加上自己的flow control,才能确保receiver能够重组所有的data。
回复

使用道具 举报

 楼主| 发表于 14-6-2010 07:32 PM | 显示全部楼层
回复 5# 苦瓜汤


    Multicast UDP packet 是没有得 packet flow control
除非 TCP
回复

使用道具 举报

Follow Us
发表于 14-6-2010 07:41 PM | 显示全部楼层
回复  苦瓜汤


    Multicast UDP packet 是没有得 packet flow control
除非 TCP
nick_khor 发表于 14-6-2010 07:32 PM


我不是说了 “需要加上自己的flow control” 吗?
回复

使用道具 举报

 楼主| 发表于 14-6-2010 07:57 PM | 显示全部楼层
回复 7# 苦瓜汤


    paiseh~ multicast packet 不可以 split 的咧~
回复

使用道具 举报


ADVERTISEMENT

发表于 14-6-2010 08:22 PM | 显示全部楼层
回复 8# nick_khor

byte array logically不是可以split吗?


  1. final int FRAGMENTED_SIZE = 256;
  2. int numPacket = new Double(Math.ceil(boass.length / (FRAGMENTED_SIZE * 1.0d))).intValue();int offset = 0;
  3. for(int i = 0; i < numPacket; i++){  ..... new DatagramPacket(boass, offset, (i == numPacket) ? boass.length - offset : FRAGMENTED_SIZE); offset += i * FRAGMENTED_SIZE;}
复制代码




上面的代码没测试过,只是demo用途。还有你需要加入一些flow control的东西例如file id或sequence number。
回复

使用道具 举报

 楼主| 发表于 14-6-2010 08:35 PM | 显示全部楼层
回复 9# 苦瓜汤


    鸟的! 我试试看! 非常感谢!
回复

使用道具 举报

 楼主| 发表于 31-7-2010 10:22 PM | 显示全部楼层
回复 9# 苦瓜汤


    老大,这几天来我实在是不明白 offset 的原理。 你给我的 concept 我参不透
>.<""
但我用另一个很耗资源方法解决了我的 大 packet 的问题了。
麻烦一下, offset 是怎么操作来的? 谢谢
回复

使用道具 举报

发表于 3-8-2010 10:44 PM | 显示全部楼层
本帖最后由 megablue 于 3-8-2010 10:54 PM 编辑
回复  苦瓜汤


    老大,这几天来我实在是不明白 offset 的原理。 你给我的 concept 我参不透
>.
nick_khor 发表于 31-7-2010 10:22 PM


offset 就是定位点。在array里就是指index了。UDP是可以通过应用层实现Reliability & Flow control的.
但前提是你要先了解如何parse/manipulate/craft packets 还有基本的socket programming概念。
何为connectionless, 何为reliable protocol, hand shacking, ACKs, data sequencing,  window size, checksum 等等等....
回复

使用道具 举报

 楼主| 发表于 4-8-2010 02:42 AM | 显示全部楼层
offset 就是定位点。在array里就是指index了。UDP是可以通过应用层实现Reliability & Flow control的.
...
megablue 发表于 3-8-2010 10:44 PM



    原来如此,之前有看过例子,有解释到offset,但我有一点不明白的是,既然我们可以校正 offset 发送出去(也就是split packet),那我们要怎样在另外一边回收然后再 merge 回来?
所以说我们要自己加上 packet flow control之类的。 但这样子的话不就等于TCP了吗?
但我会要试一试,我 pre condition 是有稳定的 LAN 。 我的要求是只要 packet (spitted) 发送到对岸,然后对岸也收到 (spitted packet) 就好了。 我就只要这么简单,google 找没有 sample,看来我要更多的阅读了  
在 Java forum 那边被人shoot 到全身洞,不过他们说的也是有道理。
Thanks.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-11-2025 08:05 AM , Processed in 0.133970 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表