第二种测试:用PC作服务端,用android做客户端:
服务端代码:
package com.tbk;
/*
* PC做Socket服务端,接收android客户端发送的请求,将发送的文件写入本地
*/
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.tbk.FileUtile;
public class PCServerSocket {
public static void main(String[] args) {
ServerSocket serverSocket = null;
FileUtile fileUtil = new FileUtile();
try {
//在PC端创建Socket服务端,监听端口7777
serverSocket = new ServerSocket(7777);
//阻塞方法,开始接收客户端请求。所谓阻塞,就是一直监听,直到有请求,否则,不向下进行
Socket socket = serverSocket.accept();
//获取客户端的inputstream数据流
InputStream inputStream = socket.getInputStream();
byte buffer[] = new byte[1024*4];
int temp = 0 ;
//用自定义的一个方法,将流写入本地一个文件
fileUtil.write2SDFromInput("d:", "a.xml",inputStream );
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码:
package com.tbk;
/*
* android作为socket客户端,将一个文件传到服务端
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class AndClientSActivity extends Activity {
Button btnClient = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnClient = (Button) findViewById(R.id.btnClient);
btnClient.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("android Client");
try {
//用模拟器连接的时候,要用10.0.2.2这个地址,是android认为pc的地址。
Socket socket = new Socket("10.0.2.2", 7777);
//读取文件,获取一个inputstream数据流
InputStream inputStream = new FileInputStream("/mnt/sdcard/gke.xml");
//获得socket向外传输的outputStream数据流
OutputStream outputStream = socket.getOutputStream();
byte buffer[] = new byte[1024*8];
int temp=0;
//将inputStream数据流内容写到outputStream流中,通过socket发送出去
while ((temp=inputStream.read(buffer))!=-1){
outputStream.write(buffer, 0, temp);
}
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
这里需要注意的是10.0.2.2这个地址,是android默认PC的地址,127.0.1.1被当做了android的内部地址
同样需要设置权限:
<uses-permission android:name="android.permission.INTERNET"/>