我正在尝试通过套接字写入传输文件或数据块.我觉得好像我正在重新发明轮子,但我对一个简单的解决方案的搜索失败了(我发现的一切都太简单或太复杂).服务器将在运行python 2.5.4的手机上运行.预期的应用是在电话和主机之间同步音乐文件.
这是我所拥有的内容,似乎有效.我发送并收到"确定"以分解流.
是来回发送'ok'作为停止位来分解数据流是一种合理的技术吗?
有没有标准的方法来做到这一点?
考虑到手机内存和处理能力的限制,在手机上运行任何类型的库服务器(ftp,http)都不是一个有用的解决方案.
服务器:
import socket
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.bind(('', 1234))
c.listen(1)
s,a = c.accept()
while True:
data = s.recv(1024)
cmd = data[:data.find('\n')]
if cmd == 'get':
x, file_name, x = data.split('\n', 2)
s.sendall('ok')
with open(file_name, 'rb') as f:
data = f.read()
s.sendall('%16d' % len(data))
s.sendall(data)
s.recv(2)
if cmd == 'end':
s.close()
c.close()
break
Run Code Online (Sandbox Code Playgroud)
客户:
import socket
s = socket.socket()
s.connect(('192.168.1.2', 1234))
def get_file(s, file_name):
cmd = 'get\n%s\n' % (file_name)
s.sendall(cmd)
r = s.recv(2)
size = int(s.recv(16)) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用USB调试模式和Windows在Android设备上查看根级别的文件和文件夹.这可能吗?电话根深蒂固.
我已经下载了一个文件浏览器应用程序,它允许我在手机上查看它.
我的主要目标是从手机中复制mmssms.db.
我已经使用本教程实现了一些文件传输代码:
和我正在使用的代码:
- (void)sendToOtherDevice:(NSData *)fileData receiverJid:(NSString *)receiverJid
{
XMPPJID *jid = [XMPPJID jidWithString:receiverJid];
XMPPSIFileTransfer *sifiletransfer = [[XMPPSIFileTransfer alloc] init];
[sifiletransfer initiateFileTransferTo:jid withData:fileData];
NSString *s = [NSString stringWithFormat:@"%@/spark",receiverJid];
NSString *jabbarID = [[[[self appDelegate] xmppStream] myJID] bare];
XMPPJID *senderjid = [XMPPJID jidWithString:jabbarID];
//[TURNSocket setProxyCandidates:[NSArray arrayWithObjects:s, nil]];
// [TURNSocket setProxyCandidates:[NSArray arrayWithObjects:s,jabbarID, nil]];
[TURNSocket setProxyCandidates:[NSArray arrayWithObjects:jid.domain,senderjid.domain, nil]];
// [TURNSocket setProxyCandidates:[NSArray arrayWithObjects:jid.domain, nil]];
//[TURNSocket setProxyCandidates:[NSArray arrayWithObjects:@"111.11.111.111", nil]];
TURNSocket *socket1 = [[TURNSocket alloc] initWithStream:[self xmppStream] toJID:jid];
// [turnSockets addObject:turnSocket];
[socket1 startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
}
-(void)turnSocket:(TURNSocket *)sender …Run Code Online (Sandbox Code Playgroud) 我可以用来传输大文件的最佳协议是什么,应该快速可靠?它必须支持低带宽系统,因为我需要跨印度传输文件.文件大小可以是100到500MB.
在我的Cordova应用程序中,我正在下载任意文件,如图像或视频文件.这是通过Cordova文件传输插件和"Range"标头完成的,因为我需要部分下载文件.
我的问题是,我想将几个小的"字节"文件合并回原来的文件,他们曾经在那里使用该文件.每次我尝试通过FileReader将结果部分读取为binaryString并将它们一起写入新文件时,该文件最终会比原始文件altogther的部分大得多,并且生成的文件无法使用.
任何帮助表示赞赏.
这是我的代码,直到现在(冗长和丑陋):
document.addEventListener('deviceready', deviceready, false);
var App;
var finishedFileUrl = "";
var async = {
sequence: function(items, callback) {
var def = $.Deferred(),
deferrers = [$.Deferred()];
for(var i = 0; i < items.length; i++) {
(function (n) {
deferrers[n + 1] = $.Deferred();
deferrers[n].always(function() {
callback(items[n], deferrers[n + 1]);
});
})(i);
}
deferrers[items.length].always(function() {
def.resolve();
});
deferrers[0].resolve();
return def.promise();
}
}
var aSmallImageArray = [
'' // Put URL to JPG accessible with Range Header Request here
]; …Run Code Online (Sandbox Code Playgroud) 我在Android上开发了一款Ionic 2应用程序,现在正尝试将其用于iOS.
该应用程序在初始登录时下载了大量文件,我使用Ionic-Native Transfer插件.在Android上一切正常,但在iOS上,应用程序似乎停留在fileTransfer.download()函数的承诺中,它甚至不会抛出错误.
示例代码:
private downloadFile(downloadURL: string, filename: string) {
return new Promise((resolve, reject) => {
this.fileTransfer.download(downloadURL, this.file.dataDirectory + filename, true).then(_ => {
console.log("download of " + filename + " complete");
resolve("download finished");
}).catch(err => {
console.log(err);
reject("download error");
});
});
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用this.file.documentsDirectory代替iOS,但我仍然没有得到任何错误或成功输出.
downloadURL来自firebaseStorage链接,但我也使用通常的下载URL进行了测试.
我认为它确实与权限有关,但还没有找到解决方案.另一个假设是,iOS上的多个线程存在限制,大约有30-100个承诺存在.
但奇怪的是缺少错误消息,它只是卡住而不是单个下载完成.
任何帮助表示赞赏!
编辑:
我还没有弄清楚问题的原因,但与此同时,Ionic发布了一个新版本的Transfer Plugin,现在在官方文档中称为FileTransfer.一旦我更改了我的代码以使用新的FileTransfer插件,问题就消失了.
我希望这有助于其他遇到同样问题的人.
我正在尝试将多gb文件从一台服务器转移到另一台服务器; 问题是RTT是150ms +.我已经尝试过使用aria2,但它仅限于16个连接,lftp没有任何防止停止传输的保护.
我想知道是否可以使用curl cli下载一个具有多个连接的文件.
我在通过蓝牙套接字发送大文件时遇到问题.较小的文件正确传输.我相信最多可以正确传输161280个字节.
编辑:我做了一些测试并缩小了原因.看起来
outStream.write(mybytearray, 0, mybytearray.length);
Run Code Online (Sandbox Code Playgroud)
在发送代码部分不写超过161280字节.我通过不关闭套接字连接看到了这种行为,从而导致read接收部分在161280字节上"阻塞".这里的蓝牙输出流有什么问题?我究竟做错了什么?
编辑2: 这样做让它通过.
for(int i = 0 ; i < mybytearray.length ; i++){
outStream.write(mybytearray[i]);
}
Run Code Online (Sandbox Code Playgroud)
发送代码:
try {
outStream = mBluetoothSocket.getOutputStream();
Log.d(TAG,"outStream created success!");
} catch (IOException e) {
Log.d(TAG,
"ON RESUME: Output stream creation failed.",
e);
}
File myFile = new File(file_name);
Log.d(TAG,"file /source.pdf created success!");
byte[] mybytearray = new byte[(int)myFile.length()];
Log.d(TAG,"file length() =" + (int)myFile.length());
FileInputStream fis = new FileInputStream(myFile);
Log.d(TAG,"fis created");
BufferedInputStream bis = new BufferedInputStream(fis,1272254 );
Log.d(TAG,"bis created …Run Code Online (Sandbox Code Playgroud) 问题:无法通过XMPP和OpenFire Server接收发送到我的Android应用程序的文件.我可以成功发送文件.我使用的asmack jar是asmack-jse-buddycloud-2010.12.11.jar
代码:
connConfig = new ConnectionConfiguration("beta.myCompany.co.uk", 5222);
connConfig.setSASLAuthenticationEnabled(true);
try {
connect("username", "password");
} catch (Exception e) {
e.printStackTrace();
}
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
if(sdm == null)
sdm = new ServiceDiscoveryManager(connection);
fileTransferManager = new FileTransferManager(connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
fileTransferManager.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(FileTransferRequest request) {
IncomingFileTransfer transfer = request.accept();
try {
FileOutputStream fos = openFileOutput(request.getFileName(), Context.MODE_PRIVATE);
InputStream stream = transfer.recieveFile();//THIS FAILS!
fos.write(IOUtils.toByteArray(stream));
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
错误(如果文件是通过Spark发送的): …
我是使用Apache Common vfs的新手,我成功连接到我已经阅读过docs的服务器但是我坚持使用这段代码.我如何列出目录/文件?
....
Session session = null;
FileSystemManager fsManager = null;
FileSystem fs = null;
try {
String host = "host_here";
int port = 22;
String userStr = "user_here";
char [] username = userStr.toCharArray();
String passStr = "password_here";
char [] password = passStr.toCharArray();
session = SftpClientFactory.createConnection(host, port, username, password, null);
//session.connect();
System.out.println("Connected to the server");
FileSystemOptions opts = new FileSystemOptions();
fsManager = VFS.getManager();
FileObject file = fsManager.resolveFile("ftp://"+userStr+":"+passStr+"@"+host+"/home/", opts);
// .... whats next i do here? .....
} catch (Exception …Run Code Online (Sandbox Code Playgroud)