package com.wal.socketactivity;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
/**
* @author jace(亮仔)
*
* Functions:
* 1.Android客户端建立服务器,建立Socket服务
*
* 2.实现简单易用界面,实现按钮滑动效果开关服务
*
* 3.使用TCP安全文件数据传送协议进行工作
*
*/
public class SocketDemo01Activity extends Activity implements Runnable{
/** Called when the activity is first created. */
//控件对象定义
private Button mSocketButton;
private ProgressDialog mProgressDialog;
private TextView mTextViewShow;
//对象,变量定义
// ServerThread mServerThread;
// MyHandler mMyHandler = new MyHandler();
ServerSocket mServerSocket = null;
int screenWidth = 0;
int screenHeight = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取屏幕的大小参数
DisplayMetrics dm = getResources().getDisplayMetrics();
//获取对象
mTextViewShow = (TextView)findViewById(R.id.mTextViewShow);
mSocketButton = (Button)findViewById(R.id.mSocketButton);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels - 50;
//按钮监听事件处理
// mSocketButton.setOnClickListener(new StartSocketListener());
//开启服务按钮的滑动事件监听处理
mSocketButton.setOnTouchListener(onTouchListener);
}
/* 开关按钮开启与关闭的事件监听处理过程 */
private OnTouchListener onTouchListener = new OnTouchListener() {
//变量参数定义
int lastX, lastY;
int left;
int top;
int right;
int bottom;
int getTopNum = 0;
//可滑动按钮的事件处理过程
@Override
public boolean onTouch(View v, MotionEvent event) {
int ea=event.getAction();
Log.i("TAG", "Touch:"+ea);
switch(ea){
//按下按钮事件处理过程
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
getTopNum = v.getTop();
// System.out.println("getTopNum = " + getTopNum);
break;
/**
* layout(l,t,r,b)
* l Left position, relative to parent
* t Top position, relative to parent
* r Right position, relative to parent
* b Bottom position, relative to parent
* */
//按钮移动的事件处理过程
case MotionEvent.ACTION_MOVE:
int dx =(int)event.getRawX() - lastX;
int dy =(int)event.getRawY() - lastY;
left = v.getLeft() + dx;
top = v.getTop() + dy;
right = v.getRight() + dx;
bottom = v.getBottom() + dy;
if(left < 0){
left = 0;
right = left + v.getWidth();
}
if(right > screenWidth){
right = screenWidth;
left = right - v.getWidth();
}
if(top < getTopNum){
top = getTopNum;
bottom = top + v.getHeight();
}
if(bottom > (getTopNum + v.getHeight())){
bottom = getTopNum + v.getHeight();
top = getTopNum;
}
v.layout(left, top, right, bottom);
Log.i("", "position->" + left +", " + top + ", " + right + ", " + bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
//按钮弹起的事件处理过程,包含服务开启
case MotionEvent.ACTION_UP:
if (left > screenWidth / 2){
v.layout(screenWidth - v.getWidth(), getTopNum, screenWidth, getTopNum + v.getHeight());
mSocketButton.setText(R.string.closebuttonname);
//固定开启服务的开关
if (right == screenWidth && top == getTopNum){
//创建服务线程,并开启线程
// mServerThread = new ServerThread();
// mServerThread.start();
//启动另一个Thread,并运行run()
Thread mThread = new Thread(SocketDemo01Activity.this);
mThread.start();
}
break;
}
//按钮跳回初始位置(效果)
v.layout(0, getTopNum, v.getWidth(), getTopNum + v.getHeight());
mSocketButton.setText(R.string.buttonname);
//服务连接恢复关闭状态
if (mServerSocket != null){
try {
//关闭ServerSocket
mServerSocket.close();
mServerSocket = null;
System.out.println("数据接收连接已经关闭.....");
//显示Toast关闭提示
Toast.makeText(SocketDemo01Activity.this, "连接已经关闭...", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
return false;
}
};
/* 物理按键事件监听与处理 */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
if(mServerSocket != null){
try {
mServerSocket.close();
mServerSocket = null;
} catch (IOException e) {
e.printStackTrace();
}
}
SocketDemo01Activity.this.finish();
}
return super.onKeyDown(keyCode, event);
}
/* 服务线程执行过程 run()方法完成 */
/* TCP协议式传输数据处理过程
*
* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
//定义ServerSocket对象
// ServerSocket mServerSocket = null;
try{
//创建ServerSocket对象,并设置端口为8888
mServerSocket = new ServerSocket(8888);
//不断循环接收数据信息
while (true) {
//打印开始服务阻塞提示
System.out.println("开始数据接收阻塞等待.....");
//发送Message实现界面提示,开始接收等待提示------------------1----------------
Message message1 = new Message();
Bundle mBundle1 = message1.getData();
mBundle1.putInt("operation", 1);
message1.setData(mBundle1);
mHandler.sendMessage(message1);
//ServerSocket开启等待接收数据的阻塞,并创建接收对象Socket
Socket mSocket = mServerSocket.accept();
//打印接收到数据信息的提示
System.out.println("接收到TCP客户端传递的信息。。。。");
//创建InputStream对象对Socket接收的数据进行获取
InputStream mInputStream = mSocket.getInputStream();
//创建数据输入流,并获取从Socket中提取的数据流的数据
DataInputStream mDataInputStream = new DataInputStream(new BufferedInputStream(mInputStream));
//获取文件长度
// long length = mDataInputStream.readLong();
//打印文件长度
// System.out.println("length-----> " + length);
//定义字节数组
byte[] bufferff = new byte[1024 * 4];
int temp = 0;
//测试文件名定义
// String fileName = "2011-06-25_15-16-29_84.jpg";
//从数据流中获取数据文件名和数据大小的联合字符串
String strFiledata = mDataInputStream.readUTF().toString();
//分割获取文件名信息和文件大小的和加字符串
String[] strData = strFiledata.split("!");
//打印输出文件名
System.out.println("fileName ---> " + strData[0]);
System.out.println("文件大�
没有合适的资源?快使用搜索试试~ 我知道了~
电脑-Android手机之间TCP协议局域网文件传送

共33个文件
class:11个
png:4个
java:4个


温馨提示
一个还好的Android手机无线(WIFI)连接无线路由实现局域网 连接电脑后,进行文件传送的Socket/TCP实例。 需要手机WIFI连接局域网,并设定IP地址,地址可在程序文件找到,或者自行对应修改,需要统一。
资源推荐
资源详情
资源评论















收起资源包目录




































































共 33 条
- 1

wal8023
- 粉丝: 7
- 资源: 13
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
- 5
- 6
前往页