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

TCP/IP 통신 서버접속

0 추천

PC와 Device간에 공유기를 이용한 TCP/IP통신을 구현하고 있습니다.

소스를 뒤적이다가 이해 안되는 부분이 있써서 글을 올리는 데요....

PC에서 서버를 열고 안드로이드 디바이스가 PC의 IP주소와 서버에 SocketPort??라고 해야지 맞는 표현인지는 모르겠지만...

이 두개가 존재해야 통신을 할수 있다고 생각을하는 데

지금 보고있는 소스에는 PC의 주소가 전혀 없써서...이게 의외였습니다.

PC에서 사용하고 있는 소스는 구할수가 없써서...

대신 안드로이드 소스를 올려드리겠습니다.

이 소스와 연동 시키려면 어떤 구조로 만들어야 할지...

이것이 제일 궁금증입니다.

부분 소스입니다.

class TCPServer implements Runnable {
		private InputStream input = null;
		private OutputStream output = null;
		private Socket socket = null;

		public void run() {
			Log.d(TAG, "TCPServer - run() ================ 끝");
			// TODO Auto-generated method stub
			is_alive = true;
			try {
				serverSocket = new ServerSocket(SERVERPORT);
				System.out.print("Conneting..");

				while (!isStop) {
					// 서버 데몬 실행
					socket = serverSocket.accept();
					addPCLinkStatus(socket.getInetAddress().getHostAddress()
							+ " " + getString(R.string.connected));
					// PC와 연결되었습니다.
					// 데이터 송수신
					int input_read = 0;
					input = new DataInputStream(socket.getInputStream());
					output = new DataOutputStream(socket.getOutputStream());
					// addPCLinkStatus(getString(R.string.measure_progress));

					while (input_read > -1) {
						// 데이터 수신
						byte[] buffer = new byte[1024];
						input_read = input.read(buffer);
						System.out.print(input_read);
						String tempbuffer = new String(buffer);
						tempbuffer = tempbuffer.trim();
						Log.d(TAG, tempbuffer);
						// 잠깐 쉬기..
						SystemClock.sleep(100);
						// 데이터 송신
						String sendMsg = ParsingCommand(tempbuffer);
						System.out.print(sendMsg);
						Log.d(TAG, "Send: " + sendMsg);
						output.write(sendMsg.getBytes());
						output.flush();
						System.out.print("Socket Write");
						if (isStop)
							break;
					}
				}
				// Socket 종료
				addPCLinkStatus(socket.getInetAddress().getHostAddress() + " "
						+ getString(R.string.disconnected));// PC 연결이 해제되었습니다.
				closeSocket();
			} catch (Exception e) {
				System.out.println(e.getMessage());
				e.printStackTrace();
			} finally {
				closeSocket();
				if (serverSocket != null) {
					try {
						serverSocket.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
					serverSocket = null;
				}

			}
			addPCLinkStatus("PC Link End");// PC Link를 종료하였습니다.\r\n
			is_alive = false;
			Log.d(TAG, "TCPServer - run() ================ 끝");

		}

		// Client Socket 종료
		private void closeSocket() {
			Log.d(TAG, "closeSocket()");
			try {
				if (input != null) {
					input.close();
					input = null;
				}
				if (output != null) {
					output.close();
					output = null;
				}
				if (socket != null) {
					socket.close();
					socket = null;
				}
			} catch (Exception e) {
				Log.d(TAG, "closeSocket() error:" + e.getMessage());
				e.printStackTrace();
			}
		}
	}
}

디바이스가 할당 받은 IP를 사용해서 서버에 접속시킬수가 있는 건가요???

밤밤바 (1,450 포인트) 님이 2014년 1월 7일 질문

1개의 답변

0 추천
 
채택된 답변
현재 저도 미치게하고있는 소켓통신입니다 ㅠㅠ

앱 부분 소스를 올려주셧는데 위의 소스의 경우는 서버쪽 소스인거 같습니다.

윗부분의 serverSocket = new ServerSocket(port번호) 에서 알수 있죠.

소켓통신의 경우 서버는 포트번호만, 클라이언트는 서버의 ip와 이 서버ip가 지정한 포트번호가 필요합니다.

서버는 자신의 ip에 지정한 포트번호로 소켓을 열고,

클라이언트는 소켓을 열때 서버의 ip와 port번호를 인자로 삼아 서버의 ip와 port번호를 서버가 지정한 값과

동일시 입력하면 연결이 됩니다.
MarineSnow (750 포인트) 님이 2014년 1월 7일 답변
밤밤바님이 2014년 1월 10일 채택됨
...