A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© QQ被盗 中级黑马   /  2013-12-6 11:52  /  2109 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

急啊,不弄明白,死不瞑目啊,有谁知道这个DatagramSocketImpl中的receive()方法是被哪个实现了,怎么我找了这么久的源码,都没看到它被实现了
  1. protected abstract void receive(DatagramPacket p) throws IOException;
复制代码



评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
我算是死的瞑目了,找了这么久的源码终于找答案了,结果到了最后竟然跟我来一个native的方法

先查到这个类
  1. abstract class AbstractPlainDatagramSocketImpl extends DatagramSocketImpl
复制代码
在看到这个类中的方法receive0
  1. protected synchronized void receive(DatagramPacket p)
  2.         throws IOException {
  3.         receive0(p);
  4.     }
复制代码
操,有时一个抽象的方法

  1. protected abstract void receive0(DatagramPacket p)
  2.         throws IOException;
复制代码

接着继续,查到这个类
  1. class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl
复制代码
在这个类中又要查socketReceiveOrPeekData方法
  1. protected synchronized void receive0(DatagramPacket p) throws IOException {
  2.         int nativefd = checkAndReturnNativeFD();

  3.         if (p == null)
  4.             throw new NullPointerException("packet");
  5.         if (p.getData() == null)
  6.             throw new NullPointerException("packet buffer");

  7.         socketReceiveOrPeekData(nativefd, p, timeout, connected, false /*receive*/);
  8.     }
复制代码



结果一看,竟然是一个nativ方法
  1. private static native int socketReceiveOrPeekData(int fd, DatagramPacket packet,
  2.         int timeout, boolean connected, boolean peek) throws IOException;
复制代码

让我郁闷至死,至死都没弄明白是receive方法是怎么接收send方法发送的数据包






回复 使用道具 举报 1 0
少年,找到就行了,关键字最好和谐下啊
回复 使用道具 举报
研究源码对自己写代码有特别好的帮助,代码之路就是copy,慢慢形成自己的自主思想,写出自己风格思想的代码。如果你用IDE(如:eclipse),你可以用快捷键去追踪(Ctrl+G,ctrl+shift+I)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马