우분투(코분투) 10.04 버전 이상에서, Sun JDK를 설치 할 경우.
sudo apt-get install sun-java6-jdk
명령어로 하면, 안된다.

보통, 저렇게 하면, 됬었는데 10버전 이상에서는 안된다.
그러면, 어떻게 해야 되는지 찾아 보았다.

sudo add-apt-repository 

를 이용해서 서버를 추가 하면된다.
그래서 2~3개 해봤는데 안된다.

물론, 
sudo apt-get update는 해준다.

하지만 안된다.

결국, 불굴의 한국인으로서 해결책은 찾았다.

결과적으로 말하면, 서버가 바뀌었다. 그래서 백날 옛날 서버 주소를 repositroy에 추가 해봤자 안됬던거다.

그러므로 뭘 치면 되느냐?

sudo add-apt-repositroy ppa:ferramroberto/java

이거다.

후... 2시간동안 이것때문에 별짓을 다 했네.


설치환경 : 노트북, 코분투 11.04버전. 
오랜만에 올리는 프로그래밍 이다.
몇일에 걸쳐, 자바 기본문법 을때고, 이제 슬슬 졸업 작품을 준비하기 위해 통신 프로그램등을 공부하게 되었다. 그중에 가장 간단한 소켓 프로그램에 대해 포스팅 해보도록 하겠다.

우선 코드를 보자.



자잘한건. 뭐 넘어가도록 하고. 
여기서  신경 쓸 것은.

ServerSocket
Socket
socket.getInputStream();
DataInputStream
socket.getOutputStream();
DataOutputStream
Scanner scan = new Scanner(System.in);

din.readUTF();
dou.writeUTF(msg); 


뭐 이정도 일까?

우선 소켓 프로그래밍이란 것은. 내가 이해한 용도는 '버퍼' 이다. 스트림하고도 연관이 되겠지.
중간에 완충 역할을 해주는 것이라고 이해를 해준 것이다.
예전에 TCP/IP 소켓프로그래밍이란 책을 보면서 약간 이해를 했지만, 그래도 그저 아직은 중간 완충 해주는 '서비스'의 일종으로 이해하고 있다. 그정도면 아직까진 충분하지 않겠는가?

자, 그리고 InputStream과 OutputStream. 이 내용은 자바 기본 문법중 stream에 관한 것에대해서 공부를 해야 한다. 기본적인 바이트코드를 DataInputStream/DataOutputStream을 이용해서 우리가 읽을 수 있게 해준다고 생각해 주면 된다.

 잡 이야기는 여기까지 하도록 하고, 서버용 프로그램을 보도록 하자.
 우선 클라이언트와는 다르게 서버에서는 ServerSocket을 사용한다. 서버로서의 소켓을 정해줘야 갑과 을을 정해서 누가 주동적으로 역할을 수행할 지를 정하는 것이다.
 그리고 API 문서에 보면 수많은 생성자가 있지만, 이 프로그램에서는 그냥 9999라는 포트만을 넘겨줘서 생성해 주고 있다.
 그리고 나온 매소드중 accept()라는 매소드는. 다른 소켓이 server에 접속하기까지 포트를 열고 대기한다.  그리고 해당하는 새로운 소켓을 return 한다.

 그리고 din.readUTF()가 뭔가 하면, 우선 InputStream에 소켓의 getInputStream 메소드를 넘긴다. 소켓의 스트림에 들어있는 내용을 반환한다. 그리고 그것을 데이터 스트림에 대입하여 인간이 읽을 수 있도록 변환한다.

 아웃풋도 마찬가지의 이야기이다.

 거기에 있는 데이터를 UTF형식으로 하여 msg에 대입하라는 내용인 것이다.

 그리고 만약 그 내용이 exit면, dou.writeUTF("END") 즉, 클라이언트 측에 END라는 문자를 날리고 소켓 종료, 서버소켓 종료하고 반복문을 종료-> 프로그램 종료 를 하라는 이야기가 완성이 된다.

 만약 아니라고 한다면, server측에서도 하고 싶은 이야기를 건네 클라이언트 측에 전달하는 것이지 :) 

이번에는 클라이언트 측을 살펴보도록 하자. 



 가장 처음에 보면, 서버용 IP를 넣는 것이 보인다. 이것을 args로 받아도 되고, 아니면 따로 입력받도록 고쳐도 좋을 것 같다. 하지만, 우선 실험용이기 떄문에 임의로 입력을 했다.
 그리고 소켓을 생성한다. 앞에서 만들어 놨던 IP와 포트 9999를 이용한다.

 그 후 한 문장을 입력 받고, 서버에 전송한다. 그리고 대기 하다가 서버측에서 메시지가 도착하면 메시지에 디스플레이 하고, 그 문장이 (END)가 아니라면, 반복문을 계속하여 메시지를 전달한다.





사실 서버 측에서 쓰레드를 이용한 FULL duplex를 만들고 싶었으나, 콘솔용에서 FULL duplex는 뭔가 안맞다 싶었다. 완전히 만지려면, 콘솔 프로그램 자체를 바꿔야 한다.
 뭐, 버퍼를 이용해서 하는 방법이 있지만......... 자, 어서어서 다음꺼 해야지^^ㅋ 

'Programming > JAVA' 카테고리의 다른 글

우분투에서 SUN JDK 설치.  (0) 2012.03.01

+ Recent posts