자바(Java)/JAVA 2SE

Telnet 프로그램

본클라쓰 2009. 2. 3. 23:05

 

● 내 용: Socket 클래스를 사용한 텔넷 프로그램

● 입출력 방법: JFrame 사용

● 핵 심: Telnet은 원격으로 컴퓨터에 명령을 내리고 결과를 볼 때 사용하는 방법입니다.

              Socket 클래스를 사용하여 명령어를 전달하고 결과를 얻는 방법을 사용하였습니다.

[ 순 서 ] 소캣 생성 → 소캣 입출력 스트림 생성 → 입출력 스트림과 소캣 스트림결 → 명령어 전달 → 처리결과 얻기

 

1. 소캣 생성: Socket s = new Socket(String host, int port_num)

 

2. 소캣 입출력 트림 생성: InputStream in = s.getInputStream()

                            OutputStream out = s.getOutputStream()

 

3. 입력 스트림과 소캣 스트림 연결 

   BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 

   PrintWriter writer = new PrintWriter(out); 

 

4. 명령어 전달(소켓과 연결된 Out스트림 사용)

   writer.print(cmd+"\n");  // "\n"부분은 명령어 입력 후 enter키 입력을 위해 사용

   writer.flush();       // 스트림을 비움, 명령전달을 끝냄

 

5. 처리결과 얻기

   while (true){
    String input = reader.readLine();
    if( input == null ) { done=false; }
    else { text_a.append(input+"\n"); }

  

 

[ 소켓을 이용한 텔넷 프로그램 ] 

package co.kim;

 

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;

 

public class NetworkProgram extends JFrame implements ActionListener{
 JTextField text_addr, text_port, text_cmd;
 JTextArea text_a;
 JPanel panel;
 
 public NetworkProgram() {
  super("Telnet");
  
  text_addr = new JTextField(10);
  text_port = new JTextField(3);
  text_cmd = new JTextField(18);
  text_a = new JTextArea();
  
  Container c = getContentPane();
  c.setLayout(new BorderLayout());
  panel = new JPanel(new FlowLayout());
  
  text_addr.setBorder(new TitledBorder("Address"));
  text_port.setBorder(new TitledBorder("Port"));
  text_cmd.setBorder(new TitledBorder("Command"));
  text_cmd.addActionListener(this);
  
  panel.add(text_addr);
  panel.add(text_port);
  panel.add(text_cmd);
  
  c.add(panel, BorderLayout.NORTH);
  c.add(new JScrollPane(text_a), BorderLayout.CENTER);
  
  setLocation(200,300);
  setSize(400, 400);
  show();  
 }


 @Override
 public void actionPerformed(ActionEvent evt){
  // TODO Auto-generated method stub
  String host = text_addr.getText();
  String port = text_port.getText();
  //String cmd = text_cmd.getText();
  String cmd = "GET /"+text_cmd.getText()+" HTTP/1.0\n";
  
  final int HTTP_PORT = 80;
    
  try {
   Socket s = new Socket(host, HTTP_PORT); // socket을 연다
   
   /* 스트림을 염 */
   InputStream in = s.getInputStream();
   OutputStream out = s.getOutputStream();
   
   /* 스티림을 reader, writer와 연결 */
   BufferedReader reader = new BufferedReader(new InputStreamReader(in));
   PrintWriter writer = new PrintWriter(out);
   
   // 명령어 전송
   writer.print(cmd+"\n");  // \n을 안하면 서버에서 명령어 입력이 안됨
   writer.flush();
   
   // 서버 응답을 읽음
   boolean done = false;
   while (!done){
    String input = reader.readLine();
    if( input == null ) { done=true; }
    else {
     //System.out.println(input);
     text_a.append(input+"\n");
    }
   }
   
   // 소켓을 닫음
   s.close();
  }catch(Exception e){
   e.printStackTrace();
  }   
 }
 
 public static void main(String[] args) {
  new NetworkProgram();
 }
}

 

 

[ 결 과 ] 

 

'자바(Java) > JAVA 2SE' 카테고리의 다른 글

java.lang.Object - 자바 최상위 클래스  (0) 2009.08.13
Thread(쓰레드) 사용 설명  (0) 2009.02.23
java.util.Timer - 쓰레드 타이머  (0) 2009.02.01
전화번호부 프로그램  (0) 2009.02.01
메모장 프로그램  (0) 2009.01.27