第二種測試:用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"/>