지금 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();
}
}
}
}