게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
채팅프로그램 만들때 awt 관련 질문입니다.
게시물ID : programmer_12157짧은주소 복사하기
작성자 : 악!내눈!
추천 : 0
조회수 : 293회
댓글수 : 1개
등록시간 : 2015/07/17 00:05:16
옵션
  • 본인삭제금지
지금 awt 이용한 채팅 프로그램 만들고있는데요. 책보면서하는데 책은 그냥 sysout으로 출력하는건데 저는
 
textarea에 append하면서 할려고하거든요.
 
그런데 책에는 main 함수 밖에다가 socket  관련 메소드를 만드는데, 문제가 뭐냐면
 
TextField를 main 함수에 놓으면 main 함수 밖의 메소드들의 ta.append가 안먹히고,
 
그렇다고 Socket함수를 안에다 놓을 수도 없구요...
 
또, Frame 함수들을 main밖에다 놓자니 정의가 안되구요...
 
뭘 안에 놓고 뭘 밖에 놔야될지 모르겠어요 ㅠㅠ
 
아래는 코드입니다.
 
public class server implements Runnable {
  ServerSocket serverSocket;
  Thread[] threadArr;
  public static void main(String[] args) {
   TextField tf = new TextField();
   TextArea ta = new TextArea(); // 여기서 얘들 위치를 main 안에다 놔둬야 하나요?

   Frame f = new Frame("Chatting Test");
   
   f.setSize(300, 200);
   f.setLayout(new BorderLayout());
   f.addWindowListener(new EventHandler());
   
   
   f.add(ta,"Center");
   f.add(tf,"South");
   
   tf.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
     ta.append(tf.getText()+"\n");
     tf.setText("");
     tf.requestFocus();
     }
   });
   ta.setEditable(false);
   f.setVisible(true);
   
   
   server server1 = new server(5);
   server1.start();
  }
  public server(int num){
   try{
    serverSocket = new ServerSocket(7777); //포트 binding
    ta.append("서버가 준비되었습니다.\n"); // 현 상태로는 ta가 지역변수다 보니 얘들이 인식을 못하네요..
   } catch(Exception e){
    e.printStackTrace();
   }
  }
  
  public void start(){
   for(int i=0; i<threadArr.length;i++){
    threadArr[i] = new Thread(this);
    threadArr[i].start();
   }
  }
  
  public void run(){
   while(true){
    try{
     ta.append("연결 요청을 기다립니다.\n");
     Socket socket = serverSocket.accept(); //소켓 생성
     ta.append(socket.getInetAddress()+"로 부터 연결요청이 들어왔습니다.\n");
     
     ta.append("getPort() : "+socket.getPort()+"\n");
     ta.append("getLocalPort:"+socket.getLocalPort()+"\n");
     
     OutputStream out = socket.getOutputStream();
     DataOutputStream dos = new DataOutputStream(out); //소켓의 출력 스트림
     
     dos.writeUTF("[Notice] Test Message1 from Server");
     ta.append("데이터를 전송했습니다.\n");
     
     dos.close();
     socket.close();
    } catch(IOException e){
     e.printStackTrace();
    }
    }
  }
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호