아무튼 개발
article thumbnail
반응형
  • Class 클래스

클래스의 이름이 클래스인 것이다. 이는 특정 클래스 혹은 인터페이스의 정보를 검색할 수 있는 메소드를 지닌다.

class Test{
  public void write() {
    System.out.println("테스트..."); } } 

먼저 Test클래스의 write 메소드를 작성하였다.

이후 Test1 클래스의 메인절에서

Class.forName 메소드를 통해 불러올 테스트의 경로를 입력한다. c는 그 곳에서 불러온 클래스이다.

newInstance는 Test 클래스를 객체 생성한 것이며 클래스보다 상위인 Object에 이를 담는다.

Test의 write 메소드를 부르기 위해선, Object로 담았던 것들 다시 형변환한다.

 

즉, Class.forName을 통해 클래스를 부를 수 있다는 것이다!

 

 


 

채팅창 프로그램 만들기 (서버 기준)

서버-클라이언트 모두 만들어야 하지만, 서버 기준으로만 먼저 알아보겠다!

public class ServerTest extends Frame implements ActionListener,Runnable {

private TextArea ta = new TextArea();
private TextField tf = new TextField();
private ServerSocket ss = null;
private Socket sc = null;

먼저 상속과 구현 관계를 설정해주고 변수를 선언한다.

BorderLayout을 통해 위치를 지정하며

WindowAdapter의 오버라이드 메소드를 통해 windowClosing 프로그램 종료를 설정해준다.

 

밑에 setTitle~ 이 부분은 각자 지정하면 됌!

 

ss.accept()를 통해 클라이언트와 연결한다.

스레드를 하는 이유는 실시간으로 계속 채팅하기 때문에 이를 돌아가게 하도록 사용한다.

 

public static void main(String[] args) {
new ServerTest().serverStart(); 
}

새로운 변수를 만들지 않고, serverStart를 통해 한번에 실행 가능

 

데이터를 받을 때

Runnable 인터페이스의 오버라이드 메소드인 run이다.

if문은 소켓 값이 없으면 프로그램을 종료하게 한다.

값이 있다면 getInputStream으로 받은 값을 br에 넣어준다.

 

먼저 소켓 안에 있는 클라이언트 ip 주소를 얻기 위해 getInetAddress().getHostAddress()로 ip값을 얻는다.

while문을 내에서 append 메소드를 통해 채팅내용을 보여준다.

*append는 문자열을 누적해서 입력해주는 기능이다.

 

오류 시에는 catch로 잡아준다.

 

데이터를 보낼 때

텍스트창에 입력한 값을 변수 str로 선언한다.

첫번째 if문에서 equals를 통해 아무 것도 입력 안한 경우를 배제한다. 또한 sc==null은 소켓값이 없을 때 클라이언트와의 연결을 해제한다.

 

두 경우에서 문자가 없으면 try문을 진행한다.

PrintWriter는 네트워크상에서 데이터를 보낼 때 사용한다. true는 flush와 같은 기능이며 PrintWriter에서 사용 가능하다.

println 을 통해 클라이언트에 전송해주며, 주의해야할 점은 'ln'을 붙여줘야 나간다!

 

그 외에는 데이터를 받을 때의 코딩과 같다. 마지막엔 null로 초기화를 해준다.

 

결과

위의 코딩에 따라 실행 결과는 이렇게 나온다!

위의 코딩은 서버 기준이기 때문에 이후 클라이언트쪽의 코딩을 함께 해줘야 채팅 프로그램을 할 수 있다.

 

반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...