更新 #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) 在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) 为什么我的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或移动下一个!!! ..必须相信我...我只是做一个新的查询,打印数据并关闭该光标
所以统计:
我需要一些观点:
如何在Java代码中读取/恢复已删除的文件.我以前用过文件读写操作,来自java.io的clases,比如FileInputStream,FileReader等,但这显然不会起作用
所以任何人,一些观点,理论,也许是一个链接......必须有一种方法!
我从一个带符号的字节数组开始并转换为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
所以??
从我阅读一些Android取证文章我明白sqlite记录可以恢复,但只有当sqlite没有使用SQLITE_SECURE_DELETE选项编译(覆盖已删除的内容为'0')或没有触发真空(返回操作系统未分配空间)+ sqlite上也有选项可以自动进行真空吸尘.
在恢复已删除的记录方面,您对Android了解多少?它是用这个选项编译的吗?意见,链接,任何事情都受到欢迎
PS.我也知道删除的其他方法,通过将行中的特定标志标记为已删除..但数据仍然存在..所以我不感兴趣!