如何通过套接字将文件从设备A发送到B时获取文件名(包括扩展名“.jpg”或“mp3”)
Posted
技术标签:
【中文标题】如何通过套接字将文件从设备A发送到B时获取文件名(包括扩展名“.jpg”或“mp3”)【英文标题】:How to get file name(include extension".jpg"or"mp3") while sending a file from device A to B via socket 【发布时间】:2013-05-28 14:48:32 【问题描述】:这个问题我纠结了很久。我想将文件从设备 A 发送到设备 B 。当我已经知道文件的扩展名(“.jpg”)时,我可以成功地将文件发送到 B,只需将其写入我的代码中,如下所示
try
ServerSocket serverSocket = new ServerSocket(PORT);
Log.d(WiFiDirectActivity.TAG, "Server: Socket opened");
Socket client = serverSocket.accept();
Log.d(WiFiDirectActivity.TAG, "Server: connection done");
final File f = new File(Environment.getExternalStorageDirectory() + "/"
+ context.getPackageName() +"/wifip2pshared-"
+ System.currentTimeMillis() +".jpg");
File dirs = new File(f.getParent());
if (!dirs.exists())
dirs.mkdirs();
f.createNewFile();
Log.d(WiFiDirectActivity.TAG, "server: copying files " + f.toString());
InputStream inputstream = client.getInputStream();
copyFile(inputstream, new FileOutputStream(f));
serverSocket.close();
server_running = false;
return f.getAbsolutePath();
catch (IOException e)
Log.e(WiFiDirectActivity.TAG, e.getMessage());
return null;
问题是现在我有几种类型的文件(例如:“.jpg”、“.mp3”、“.txt”) 如何区分每个文件的类型并发送包含扩展名的整个文件名(例如:Bruno Mars-Lazy song.mp3),而不是分配文件名并输入我的原始代码。 提前致谢!
【问题讨论】:
我可以在您的代码中看到f.getAbsolutePath();
返回带有扩展名的完整路径。
嘿 MAC ,我的问题是,当我将文件传输到设备 B 并使用文件名(包括扩展名)创建文件时,我想从设备 A 获取文件名。如果没有文件的扩展名,我传输的文件无法以正确的格式保存(ABC 而不是 ABC.jpg)。因此我无法打开文件 ABC 我该怎么办?谢谢
【参考方案1】:
您需要在套接字客户端和服务器之间就文件名和内容之间的分隔符创建一个合同。例如,您可以发送文件名,后跟|
,然后是文件内容。在服务器端,您阅读直到获得|
,这是您的文件名。然后读取文件内容。
【讨论】:
嗨 John B,你能告诉我如何在文件名和内容之间添加分隔符吗?你能给我一些例子吗?谢谢! 我假设您在客户端有一些OutputStream
。做。 outputStream.write(myFile.getName().getBytes()); outputStream.write("|".getBytes()); outputStream.write(fileContents);
以上是关于如何通过套接字将文件从设备A发送到B时获取文件名(包括扩展名“.jpg”或“mp3”)的主要内容,如果未能解决你的问题,请参考以下文章
我如何通过 json 将数据从我的设备发送到我的 php 文件