Android 用Socket实现PC和手机的文件传输
PC服务器端代码:
/*
* PC与<a href="http://lib.csdn.net/base/android" class='replace_word' title="Android知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Android</a>客户端实现文件的传送
* PC服务器端
*/
package com.<a href="http://lib.csdn.net/base/android" class='replace_word' title="Android知识库" target='_blank' style='color:#df3434; font-weight:bold;'>android</a>.test;
import <a href="http://lib.csdn.net/base/java" class='replace_word' title="Java 知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>.ServerSocket;
import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.net</a>.Socket;
public class TransferFileServer {
private static final int HOST_PORT = ;
private void start() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(HOST_PORT);
while (true) {
String filePath = "/home/fan/Pictures/1.jpg";
File file = new File(filePath);
System.out.println("文件长度:" + (int) file.length());
s = ss.accept();
log("建立Socket连接");
DataInputStream dis = new DataInputStream(
new BufferedInputStream(s.getInputStream()));
dis.readByte();
DataInputStream fis = new DataInputStream(
new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(file.getName());
dos.flush();
dos.writeLong((long) file.length());
dos.flush();
int bufferSize = ;
byte[] buf = new byte[bufferSize];
while (true) {
int read = ;
if (fis != null) {
read = fis.read(buf);
}
if (read == -) {
break;
}
dos.write(buf,,read);
}
dos.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
s.close();
log("文件传输完成");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void log(String msg) {
System.out.println(msg);
}
public static void main(String args[]) {
new TransferFileServer().start();
}
}
ClientSocket:辅助类
/*
* PC与Android文件传输
* Android客户端
*/
package com.android.test;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.Net</a>.Socket;
import java.net.UnknownHostException;
public class ClientSocket {
private String ip;
private int port;
private Socket socket = null;
DataOutputStream out = null;
DataInputStream getMessageStream = null;
public ClientSocket(String ip, int port) {
this.ip = ip;
this.port = port;
}
public void createConnection() {
try {
socket = new Socket(ip, port);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (socket != null) {
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (socket != null) {
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} finally {
}
}
public void sendMessage(String sendMessage) {
try {
out = new DataOutputStream(socket.getOutputStream());
if (sendMessage.equals("Windows")) {
out.writeByte(0x1);
out.flush();
return;
}
if (sendMessage.equals("Unix")) {
out.writeByte(0x2);
out.flush();
return;
}
if (sendMessage.equals("<a href="http://lib.csdn.net/base/linux" class='replace_word' title="Linux知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Linux</a>")) {
out.writeByte(0x3);
out.flush();
} else {
out.writeUTF(sendMessage);
out.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (out != null) {
try {
out.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
public DataInputStream getMessageStream() {
try {
getMessageStream = new DataInputStream(new BufferedInputStream(
socket.getInputStream()));
// return getMessageStream;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (getMessageStream != null) {
try {
getMessageStream.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
return getMessageStream;
}
public void shutDownConnection() {
try {
if (out != null) {
out.close();
}
if (getMessageStream != null) {
getMessageStream.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Android客户端:Acitivyt实现:
package com.android.test;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity implements OnClickListener{
private ClientSocket cs = null;
private static final String FILE_PATH = "/mnt/sdcard/";
private String ip = "192.168.1.103";
private int port = ;
private String sendMessage = "<a href="http://lib.csdn.net/base/linux" class='replace_word' title="Linux知识库" target='_blank' style='color:#df3434; font-weight:bold;'>linux</a>";
private Button mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.start);
mButton.setOnClickListener(this);
}
private void start() {
if (createConnection()) {
sendMessage();
getMessage();
}
}
private void getMessage() {
if (cs == null)
return;
DataInputStream inputStream = null;
inputStream = cs.getMessageStream();
try {
String savePath = FILE_PATH;
int bufferSize = ;
byte[] buf = new byte[bufferSize];
int passedlen = ;
long len = ; savePath += inputStream.readUTF();
Log.d("AndroidClient","@@@savePath"+savePath);
DataOutputStream fileOut = new DataOutputStream(
new BufferedOutputStream(new BufferedOutputStream(
new FileOutputStream(savePath))));
len = inputStream.readLong();
Log.d("AndoridClient","文件的长度为:"+len);
Log.d("AndroidClient","开始接收文件");
while(true) {
int read = ;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen += read;
if (read == -) {
break;
}
Log.d("AndroidClient","文件接收了"+(passedlen*/len)+"%/n");
fileOut.write(buf,,read);
}
Log.d("AndroidClient","@@@文件接收完成"+savePath);
fileOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void sendMessage() {
if (cs == null)
return;
cs.sendMessage(sendMessage);
}
private boolean createConnection() {
cs = new ClientSocket(ip, port);
cs.createConnection();
Log.d("Main", "连接服务器成功:");
return true;
}
public void onClick(View v) {
start();
}
}
Android 用Socket实现PC和手机的文件传输的更多相关文章
- python+socket实现网络信息交互及文件传输
Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket又称"套接字",应用程序通常通过"套接字" ...
- android adb命令,向开发手机添加文件
adb文档 把本地文件发送到调试手机 C:\Users\ajanuw>adb push C:\Users\ajanuw\Music\j.mp3 /storage/emulated/0/Downl ...
- 非堵塞socket实现android手机与PC的文件传输
项目须要是通过WIFI建立手机和PC的通信,然后自己定义一个简单的协议对要传输的文件进行校验,传输的文件是2张3M的图片,要求考虑网络中断情况处理. 我这里採用的是非堵塞socket来实现的,之前查过 ...
- Android Socket连接PC出错问题及解决
最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.
- Appium 连手机失败Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND localhost undefined:4724
问题:Appium执行,连接手机报下面的错误 Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND localho ...
- android视频录制、另一部手机实时观看方案
最近调研android视频录制.另一部手机实时观看,大致有以下几种思路. 1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:80 ...
- Android之socket多线程(二)
使用ServerSocket创建服务器端: public static void main(String[] args) throws IOException { // TODO Auto-gener ...
- Nginx配置网站适配PC和手机
考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本.访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面. 1.判断 ...
- 【转】Nginx区分PC或手机访问不同网站
原文链接:http://www.nginx.cn/784.html 近几年来,随着手机和pad的普及,越来越多的用户选择使用移动客户端访问网站,而为了获取更好的用户体验,就需要针对不同的设备显示出最合 ...
随机推荐
- ArcGIS api for javascript——1,2,3综合
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- BNU 34974 MATLAB大法好
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=34974 MATLAB大法好 Time Limit: 8000ms Memory Limi ...
- 五大最受欢迎的BUG管理系统
Google在中国大陆遭遇变故做出临时性的退出大陆市场,也使非常多忠实的用户受到小小的挫折,以本公司为例.原本的BUG都是记录在google的 EXCEL在线文档中,由于常常性的打不开.測试和开发组在 ...
- Iocomp控件之数字显示【图文】
Iocomp关于数字显示有自己的一套方案.并且效果非常棒哦 效果图: 插入控件: 默认效果: 随意改动属性后: 加入变量 调用函数: ); 效果图:
- 数字信号处理C语言集(1.1 随机数的产生)
main.cpp 所建工程文件如下图所示 uniform.h #ifndef _UNIFORM_H_ #define _UNIFORM_H_ double uniform(double a,doub ...
- 异步Ajax
Ajax异步刷新应用在Web开发中经常用到,在过去WebForm中通常是使用JQuery和一般处理程序或者aspx页面来实现: 在MVC中,虽然依然可以使用一般处理程序,但是一般还是通过在Contro ...
- python获取教务管理系统的MM照片
前提:你的教务管理系统是明文存储大家的图片,加密的图片就不好弄了... 也就是能够通过浏览器直接访问...技术上就不存在什么问题了...如果是学号存储的就更方便了 然后我们就可以写个小脚本了...其实 ...
- js笔记3
1字符串 replace("","")替换,前面为要替换什么,后面为替换的内容只能替换一个 2DOM 时间三要素 事件源 谁身上发生的行为 事件 单机 双击 事 ...
- 测试理论--web测试方法总结
一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号.禁止直接输入特殊字符时,使 ...
- Json学习总结(1)——Java和JavaScript中使用Json方法大全
摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语 ...