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

자바-안드로이드 socket 통신 에러 해결좀부탁드립니다.

0 추천

안녕하세요 안드로이드 공부하는 학생입니다.

지금 자바서버와 안드로이드 소켓통신공부하는데

예제보면서 하는데도 계속 에러가 발생해서 질문드립니다.

서버(PC)와 안드로이드(폰)은 같은 네트워크상에 있는데도 서버열고 안드로이드로 실행하면

접속이 이뤄지질않습니다. 로그같이 첨부드리겠습니다

고수님들 답변부탁드립니다


//서버소스코드입니다.
public static void main(String[] args) throws IOException {
		serverSocket = null;
		clientSocket = null;
		out = null;
		in = null;
		
		serverSocket = new ServerSocket(8090);
		System.out.println("client wait...");
		
		try{
			clientSocket = serverSocket.accept();
			System.out.println("client connected...");
			out = new PrintWriter(clientSocket.getOutputStream(), true);
			in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
			while(true){
				String inputLine = null;
				inputLine = in.readLine();
				System.out.println("received client msg : " + inputLine);
				out.print(inputLine + " - return message");
				if(inputLine.equals("quit")){
					System.out.println("client disconnected...");
					break;
				}
			}
			out.close();
			in.close();
			clientSocket.close();
			serverSocket.close();
		} catch(Exception e){
			e.printStackTrace();
		}
	}
}
//클라이언트입니다
public class MainActivity extends Activity implements OnClickListener{

	private Socket socket;
	BufferedReader socket_in;
	PrintWriter socket_out;
	EditText ipEditText;
	Button connectBtn;
	TextView deName;
	String data;
	String serverIP;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		ipEditText = (EditText)findViewById(R.id.ipEditText);
		connectBtn = (Button)findViewById(R.id.connectBtn);
		deName = (TextView)findViewById(R.id.deName);
		
		connectBtn.setOnClickListener(this);
		
		serverIP = "192.168...";
		
		Thread worker = new Thread() {
			public void run() {
				try {
					socket = new Socket(serverIP, 8090);
					socket_out = new PrintWriter(socket.getOutputStream(), true);
					socket_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				} catch(IOException e){
					e.printStackTrace();
				}
				try {
					while(true){
						data = socket_in.readLine();
						deName.post(new Runnable() {
							public void run() {
								// TODO Auto-generated method stub
								deName.setText(data);
							}
						});
					}
				} catch(Exception e){
					
				}
			}
		};
		worker.start();
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		String data = ipEditText.getText().toString();
		Log.v("test", " " + data);
		if(data != null){
			socket_out.println(data);
		}
	}
	
	protected void onStop() {
		super.onStop();
		try{
			socket.close();
		} catch(IOException e){
			e.printStackTrace();
		}
	}
	
}

실습위주 (430 포인트) 님이 2014년 9월 12일 질문

2개의 답변

0 추천

로그상은 socket_out 값이 null 일 듯 한데요..

 

socket = new Socket(serverIP, 8090);
socket_out = new PrintWriter(socket.getOutputStream(), true); 에서 실패 한 듯 합니다.
 

AndroidMenifest.xml에 인터넷 퍼미션을 넣었는지 확인 해 보시고, 

소켓 생성시  나오는 Exception 값을 확인 해 보쎄요..

사악미소 (65,330 포인트) 님이 2014년 9월 12일 답변
0 추천

혹시 adt 상에서 테스트 하나요?

adt 상태에서는 아이피 주소가 10.0.2.2 이런식으로 가기 때문에 접속이 안될건데

되도록 하려면 telnet 으로 해서 redir add tcp 포트를 해줘야 통신이 될거구...

 

혹시나 해서 말씀드립니다

 

doridori2013@nate.com

익명사용자 님이 2014년 9월 12일 답변
...