2019.7 ~ 2019.11
Sender에서 Device를 선택하면 나타나는 화면.
package TCPServer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException { // 메인함수, IOException
ServerSocket serverSocket_S = null; // 서버소켓 생성
ServerSocket serverSocket_R = null; // 서버소켓 생성
Socket clientSocket_S = null; // 서버소켓이 지정한 포트를 타고온 상대 ip를 저장할 수 있다. 샌더의 소켓
Socket clientSocket_R = null; // 리시버의 소켓
PrintWriter out = null; // String 타입의 문자를 보낼수 있는 변수.
BufferedReader in = null;// stream 타입의 문자를 읽어서 저장할 수 있는 변수.
serverSocket_S = new ServerSocket(9000); // 서버소켓 생성
serverSocket_R = new ServerSocket(9001); // 서버소켓 생성
System.out.println("연결 대기중");
clientSocket_R = serverSocket_R.accept(); // 클라이언트로부터 데이터가 오는것을 감지한다.
System.out.println("Receiver 클라이언트 연결");
while (true) {
try {
// 서버 소켓을 만들고 연결을 기다린다.
clientSocket_S = serverSocket_S.accept(); // 클라이언트로부터 데이터가 오는것을 감지한다.
System.out.println("Sender 클라이언트 연결");
// 클라이언트로 부터 데이터를 받는다.
while (true) {
out = new PrintWriter(clientSocket_R.getOutputStream(), true); // String 타입을 stream 형태로 변환하여 전송
in = new BufferedReader(new InputStreamReader(clientSocket_S.getInputStream()));
// 소켓에서 넘어오는 stream 형태의문자를 얻은 문자를 얻은후 읽어 들어서 버퍼스트림 형태로 in 에 저장.
String inputLine = null; // in으로 받아들인 데이터를 저장할 string 생성
inputLine = in.readLine(); // in에 저장된 데이터를 String 형태로 변환 후 읽어들어서 String에 저장
System.out.println("클라이언트로 부터 받은 문자열:" + inputLine); // 저장된값 콘솔 출력
out.println(inputLine); // 돌아온값을 다시 되돌려 보낸다. //String이 stream으로 변환되어 전송됨.
if (inputLine == null) {
System.out.println("Sender 클라이언트 연결 해제");
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* out.close(); in.close(); clientSocket_R.close(); clientSocket_S.close();
* serverSocket_R.close(); serverSocket_S.close(); // 열린 모든것을 닫아준다.
*/
}
}
공유기를 통한 기기 간 통신을 위해서 PortFowarding 작업이 필요했다.
이용하는 데에 별다른 제품이 필요한 것이 아니라, 사용하지 않는 Android OS의 스마트폰과 이어폰 단자에 부착할 적외선 송출기만 있으면 사용 가능하다.
이런 이유로 수십, 수백만 원대의 최신제품이 아닐지라도, 어플리케이션을 잘 활용한다면 그에 못지않은 기능을 할 수 있을 것이다.
서버의 구현, 적외선 신호, 음성인식에 대한 지식이 많이 부족한 상태에서 아이디어만을 가지고 프로젝트를 진행했다.
구현하기 위해서 새로운 것을 학습하며 원리를 이해해나가는 것에 어려움도 많았지만, 결과가 나오고 나니 성취감으로 돌아왔다.
적외선 신호를 이어잭으로 송출하는 방법을 떠올리는 데, 많은 시간이 들었다.
처음에는 Android Studio에서 주어지는 라이브러리를 이용해 손쉽게 구현할 수 있을 것이라 생각했지만, 해당 라이브러리는 애초에 적외선 송신장치가 부착되어 있는 기기를 위한 것이었고,
이어잭을 통해 보내기 위해서는 음성파일을 이용해야 한다는 생각은 들었지만 어떤 음성을 보내야 적외선 송신기가 어떤 신호를 보낼 지 알아내기 위해 힘든 과정을 겪었다.
조금 더 많은 시간이 주어졌다면 송신기의 성능을 개선하기 위해 다양한 시도를 할 수 있었을 거란 아쉬움이 남는다.