android java.net.ConnectException: Connection refused: connect 2

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



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章