小编pul*_*988的帖子

Torrent 相关:UDP 协议上的跟踪器响应(更新 #3 - 工作)

更新 #4:添加了演示 java 片段,用于使用 UDP 并发送公告消息(记住连接是第一个!)检查下面自己的响应。

=================================================== ==

更新#3:我设法让它工作,下面介绍的方法 doConnect() 是可以的,更多信息在我自己的回复中。

=================================================== ==

我主要感兴趣的是当公告 url 的协议是 UDP 时如何下载跟踪器响应。

详细信息:这些是来自有效 torrent 文件的一些公告网址(第一个是主要的)

http://tracker.torrentbox.com:2710/announce
udp://elbitz.net:80/announce.php?passkey=362fc69de3402e8ef5794c7ecf7c58d4
udp://tracker.podtropolis.com:2711/announce
Run Code Online (Sandbox Code Playgroud)

如果协议是 HTTP,一切都会顺利,这就是我的工作方式:

String fullUrl = announceURL + "?info_hash=" + this.m_TorrentInfoHashAsURL + .. // i add the params
URL url = new URL(fullUrl);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
.. //reading the stream
Run Code Online (Sandbox Code Playgroud)

如果协议是 UDP,则 URL 构造函数会抛出“java.net.MalformedURLException:未知协议:udp”

所以我想问题可以恢复为以下内容:如何从 UDP 协议上的 URL 下载响应?(希望很简单并且我没有看到数据报的东西)

更新#1:

我在网上做了一些更多的调查并得出了下面粘贴的以下结构(应该可以工作..但不行,我的意思是在本地它可以,但不能使用真正的跟踪器)

规格链接:http://www.bittorrent.org/beps/bep_0015.html

例如:这就是我创建套接字的方式,但是在有效的跟踪器上我从未收到任何响应,因此有些东西不起作用:

if full url: udp://elbitz.net:80/announce.php?passkey=362fc69de3402e8ef5794c7ecf7c58d4
this.m_TrackerHost: elbitz.net 
this.m_TrackerPort: 80 …
Run Code Online (Sandbox Code Playgroud)

java bittorrent udp http

5
推荐指数
1
解决办法
4031
查看次数

C#thread中止异常

在thread.Abort()之后会发生什么?

说我有:

Thread mWorker = new Thread(new ThreadStart(this.run));
..
mWorker.Start();

**where**

private void run() 
{
      Logger.d(TAG, "run()");

      ...
      try {
        while (this.mRunning){
          ...
        }
      } catch (ThreadAbortException tae){
           Logger.e(TAG,"some msg", tae);
           this.doSomething();
      } catch (IOException ioe){
           Logger.e(TAG,"some msg", ioe);
           this.doSomething();
      } catch (Exception e){
           Logger.e(TAG,"some msg", e);
           this.doSomething();
      } finally {
            gracefoulyClose();
      }

      Logger.d(TAG, "run() - ended");
}
Run Code Online (Sandbox Code Playgroud)

线程更复杂..但这里显示的是必要的.那么当Abort()被调用时会发生什么?我的捕获工作会继续doSomething()的调用吗?

因为我还在控制台收到:

A first chance exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
An exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll but was …
Run Code Online (Sandbox Code Playgroud)

c# multithreading

4
推荐指数
1
解决办法
1万
查看次数

Android Cursor - moveToNext()似乎没有到光标的末尾

为什么我的Android光标不会一直走到最初的"承诺"的末尾?

我的cursor.getCount()与我上一次的cursor.getPosition()不同.检查我的while循环!这就是我用它做的一切!

注意:1.它是关于查询联系人内容提供者(android api> 5)2.我只显示基本代码

Cursor cursor = mContext.getContentResolver().query(mUri, mProjections, null, null, null);
Logger.d(TAG, "***  cursor.getCount(): "+cursor.getCount());
while (cursor.moveToNext()) {
    Logger.d(TAG, "| position: "+cursor.getPosition());
    processMainCursor(serializer, cursor);
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)

processMainCursor()将显示来自游标的数据+执行另一个查询:一个4个电话,一个4个电子邮件,一个4个IM帐户:

void processMainCursor(XmlSerializer serializer, Cursor main_cursor) {
     writeCursorData(serializer, main_cursor); //writes cursor data, column by column
     writePhoneEntities(serializer, main_cursor);
     writeEmailEntities(serializer, main_cursor);
     writeIMEntities(serializer, main_cursor);
}
Run Code Online (Sandbox Code Playgroud)

在我的writeXXX方法中没有一个我关闭我的main_cursor或移动下一个!!! ..必须相信我...我只是做一个新的查询,打印数据并关闭该光标

所以统计:

  • cursor.getCount()= 695(总是)
  • 注释writePhoneEntities,writeEmailEntities,writeIMEntities:cursor.getCount()= last cursor.getPosition()= 695(所以正确!)
  • 留下一两个/所有的writeXEntities显示随机性; 例如:将它们全部留下:last cursor.getPosition()有时会显示254,257,253等; 只留下手机和IM:514,510,511等( …

android android-contacts android-cursor

2
推荐指数
1
解决办法
7005
查看次数

如何读取/恢复已删除的文件

我需要一些观点:

如何在Java代码中读取/恢复已删除的文件.我以前用过文件读写操作,来自java.io的clases,比如FileInputStream,FileReader等,但这显然不会起作用

所以任何人,一些观点,理论,也许是一个链接......必须有一种方法!

java file

1
推荐指数
1
解决办法
3715
查看次数

C#字节数组 - 有符号和无符号两难

我从一个带符号的字节数组开始并转换为unsigned ..所以打印结果是否正确?

byte[] unsigned = new byte[] {10,100,120,180,200,220,240};
sbyte[] signed = Utils.toSignedByteArray(unsigned);
Run Code Online (Sandbox Code Playgroud)

和print(我只是用StringBuilder附加它们):

签字:[10,100,120,-76,-56,-36,-16]
无符号:[10,100,120,180,200,220,240]

哪里:

public static sbyte[] toSignedByteArray(byte[] unsigned){
    sbyte[] signed = new sbyte[unsigned.Length];
    Buffer.BlockCopy(unsigned, 0, signed, 0, unsigned.Length);
    return signed;
}
Run Code Online (Sandbox Code Playgroud)

如果我改为这个,我会得到相同的结果.

sbyte[] signed = (sbyte[])(Array)unsigned;
Run Code Online (Sandbox Code Playgroud)

不应该-128(签名)变为0,-118变为10,依此类推......而不是10(签名)= 10(未签名)!?

因为
sbyte -128到127
字节0到255

所以??

c# byte

1
推荐指数
1
解决办法
6690
查看次数

Android SQLite和删除记录恢复

从我阅读一些Android取证文章我明白sqlite记录可以恢复,但只有当sqlite没有使用SQLITE_SECURE_DELETE选项编译(覆盖已删除的内容为'0')或没有触发真空(返回操作系统未分配空间)+ sqlite上也有选项可以自动进行真空吸尘.

在恢复已删除的记录方面,您对Android了解多少?它是用这个选项编译的吗?意见,链接,任何事情都受到欢迎

PS.我也知道删除的其他方法,通过将行中的特定标志标记为已删除..但数据仍然存在..所以我不感兴趣!

sqlite android data-recovery

0
推荐指数
1
解决办法
3949
查看次数