티스토리 뷰



Windows에서 파일 공유를 위해 사용하는 프로토콜은 smb이다.
즉 Android에서 윈도우의 파일을 가져오거나 윈도우로 파일을 전송할 때는 SMB를 통하여 하면 된다.

JAVA용 SMB라이브러리는 jcfis가 있다. 아래 링크 누르면 다운 받을 수 있다.
위 라이브러리를 Android Project에 임폴트 한 후에 다음과 같이 코딩 해주면 파일을 전송하거나 받을 수 있다.

우선 아래와 같이 네트워크 연결 상태를 확인한다.
 /**
	 * Network 연결 상태를 확인한다.
	 */
	private boolean checkNetworkStatus() {
		WifiManager wManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
		WifiLock wLock = wManager.createWifiLock(TAG);
		wLock.acquire();
		
		ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
		if(cm == null)
		{
			Log.d(TAG, "Fail to get network services");
			return false;
		}
		
		if(!cm.getActiveNetworkInfo().isConnected())
		{
			Log.d(TAG, "Failt to connect");
			return false;
		}
		
		return true;
	}

아래는 SD카드에서 파일을 읽어서 SMB로 전송하는 코드이다.
/**
	 * SD카드에서 파일을 읽어서 SMB로 전송한다.
	 */
	private void outputFile() {
		
		try {
			FileInputStream fis = new FileInputStream("sdcard/test.jpg");
			String url = "smb://guest@127.0.0.1/jhbaek/test.jpg";
			//String url = "smb://id:password@ip/folder/test.jpg";
			SmbFile smbFile = new SmbFile(url);
			
			
			
			SmbFileOutputStream sos = new SmbFileOutputStream(smbFile);
			
			byte[] b = new byte[8192];
			int n = 0;
			while((n = fis.read(b)) > 0){
				sos.write(b, 0, n);
			}
			fis.close();
			sos.close();			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SmbException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

아래는 SMB에서 파일을 읽어서 SD카드에 저장하는 코드이다.
	/**
	 * SMB로 파일을 가져와서 SD카드에 쓴다.
	 */
	private void inputFile() {
		
		try {
			
			
			String url = "smb://guest@127.0.0.1/jhbaek/test.jpg";
			//String url = "smb://id:password@ip/folder/test.jpg";
			SmbFile smbFile = new SmbFile(url);
			
			
			FileOutputStream fos = new FileOutputStream("sdcard/test.jpg");
			SmbFileInputStream sfis = new SmbFileInputStream(smbFile);
			
			
			byte[] b = new byte[8192];
			int n = 0;
			
			while((n = sfis.read(b)) > 0){
				fos.write(b, 0, n);
			}
			
			fos.close();
			sfis.close();
						
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SmbException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


또한 아래와 같은 권한이 필요하기 때문에 매니페스트에 넣도록 한다.
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함