마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

지난번 안드로이드>자바 파일전송간 문제 질문 이어서입니다. (눈빛님)

0 추천

http://www.masterqna.com/android/81472/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%9E%90%EB%B0%94-%ED%8C%8C%EC%9D%BC%EC%A0%84%EC%86%A1%EA%B0%84-%EB%AC%B8%EC%A0%9C%EC%9E%85%EB%8B%88%EB%8B%A4 

이전에 작성한 글입니다 눈빛님이 서버쪽 코드가 필요하다 해서 같이 첨부해 봅니다. 

package a;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable {
	public static final int serverPort = 30001;
	@Override
	public void run() {
		try {
			System.out.println("대기중..");
			ServerSocket serverSocket = new ServerSocket(serverPort);
			while (true) {
				Socket sock = serverSocket.accept();
				System.out.println("수신중....");
				try {
					BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
					String str = in.readLine();
					System.out.println("수신중인 파일 이름 : " + str);
					File f = new File("C:\\Users\\T1\\Desktop\\", str + ".txt");
					FileOutputStream output = new FileOutputStream(f);
					File[] files = f.listFiles();
					long length = f.length();
					byte[] buf = new byte[9999];
					while (sock.getInputStream().read(buf) > 0) {
						output.write(buf, 0, 9998);
						output.flush();
						System.out.println("파일 받는중... ");
					}
					in.close();
					output.close();
					System.out.println(str + ".txt 수신완료");
				} catch (Exception e) {
					System.out.println("서버 에러!!");
					e.printStackTrace();
				}
				finally {
					sock.close(); 
				}
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] argv) {
		Thread doit = new Thread(new Server());
		doit.start();
	}
}  

 

익명사용자 님이 2018년 1월 15일 질문
올려주신 서버 소스와 같이 종합해보면, 아래와 같이 동작하는 것으로 판단됩니다.
의도하신 바가 아래 동작과 같다면, "11111.txt" 의 내용 확인 부탁드립니다.

1. 안드로이드에서 버튼1을 눌러 소켓연결
2. 안드로이드의 (EditText) findViewById(R.id.editText3) 를 입력하고 Send 버튼을 누르면
3. 서버에 2.에서 입력한 값으로 바탕화면에 파일이 생성되고
4. 안드로이드의 "/storage/A212-21FF/11111.txt" 파일을 읽어 서버로 전송
5. 버튼2를 눌러 소켓종료
제가 의도한 바와 거의 맞습니다 조금만 더 질문해도 될까요
1.버튼 3이 아닌 2를 눌러 종료인가요 전 3이라고 생각했는데
2. 11111.txt 의 내용은 한글로 된 텍스트 문서였습니다. 한글인 것이 문제일 수 있나요
3. 경로 문제일 수도 있나요
4. 파일을 읽어 서버로 전송 이후 입력한 값으로 생성된 파일에
써주는 기능이 없는건가요
1. 주석내용만 보면 버튼2가 "exit' 버튼으로 되어 있으며, 클릭하면 소켓을 종료하고 있습니다.
2. 빈파일이 생긴다고 하셨으니, 한글문제는 아닌것 같습니다. 한글문제면 내용은 있지만 한글이 깨져서 표시될 것 같습니다.
3. 경로라는게 안드로이드쪽이면 소스상 "/storage/A212-21FF/11111.txt" 위치에 파일이 존재하여야 하며, 서버쪽은 파일은 생성된다고 하셨으니 문제없어 보입니다.
4. 말씀하신 기능은 없는 것으로 보여집니다.

- 로그도 출력되고 있으니, 출력되는 로그로 어느부분에서 문제가 발생하는지 확인이 가능해 보입니다. 서버는 CMD창에 바로 보일 것 같고, 안드로이드는 Logcat으로 보시면 될 것 같습니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...