import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class GUIChatClient extends Frame implements ActionListener, Runnable {
Button bt_exit; //종료
Button bt_send; //전송
Button bt_connect; //서버로 연결
TextArea ta_list;
TextField ip; //서버 ip
TextField name; //대화명
TextField input; //채팅 입력
Socket client;
BufferedReader br; //입력
PrintWriter pw; //출력
String server_ip; //서버ip주소
final int port = 5005; //서버 포트 번호
CardLayout ca; // 카드레이아웃
public GUIChatClient(){
setTitle("채팅 클라이언트 ver1.0");
ca = new CardLayout();
setLayout(ca);
Panel connect = new Panel(); //접속화면
connect.setLayout(new BorderLayout());
Panel chat = new Panel(); //채팅화면
chat.setLayout(new BorderLayout());
bt_connect = new Button("서버접속");
bt_connect.addActionListener(this);
ip = new TextField("127.0.0.1",15); //자신의 ip,15글자
name= new TextField("축합격",15);
Panel connect_sub = new Panel(); //접속창의 하위 화면
connect_sub.add(new Label("서버 아이피"));
connect_sub.add(ip);
connect_sub.add(new Label("대화명"));
connect_sub.add(name);
connect.add(new Label("채팅 접속 화면", Label.CENTER),BorderLayout.CENTER);
connect.add(connect_sub, BorderLayout.CENTER);
connect.add(bt_connect, BorderLayout.SOUTH);
//채팅창 화면 구성
ta_list = new TextArea(); //채팅화면 보여주는 부분
input = new TextField("",25);// 채팅 입력
bt_exit = new Button("종료");
bt_send = new Button("전송");
bt_exit.addActionListener(this);
bt_send.addActionListener(this);
input.addActionListener(this);
Panel chat_sub = new Panel(); //채팅창 하위 패널
chat_sub.add(input); //채팅 입력을 붙인다
chat_sub.add(bt_send);
chat_sub.add(bt_exit);
chat.add(new Label("채팅프로그램 v1.0", Label.CENTER), BorderLayout.CENTER);
chat.add(ta_list, BorderLayout.CENTER);
chat.add(chat_sub, BorderLayout.SOUTH);
add(connect,"접속창"); //카드레이아웃에 접속창 붙이기
add(chat, "채팅창"); //카드레이아웃에 채팅창 붙이기
ca.show(this, "접속창"); //첫화면은 접속창이다
setBounds(250,250,300,300);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
Object obj = e.getSource();
if(obj == bt_connect){
server_ip = ip.getText();
Thread th = new Thread(this);
th.start();
ca.show(this, "채팅창");
}//end if
else if(obj == bt_exit){
System.exit(0);
}//else
else if(obj == bt_send || obj == input){
String msg = input.getText(); //채팅 입력
pw.println(msg); //채팅 내용 전송
pw.flush(); //즉시 전송
input.setText(""); // 채팅 입력란 지우기
input.requestFocus();
}//else
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void run() { //채팅 내용 보여주는 기능
try {
System.out.println("밥ㅎㅎ");
client = new Socket(server_ip, 5005);//소켓 생성(서버로 접속)
InputStream is = client.getInputStream(); //입력
OutputStream os = client.getOutputStream(); //출력
br = new BufferedReader(new InputStreamReader(is));
pw = new PrintWriter(new OutputStreamWriter(os));
String msg = name.getText();//대화명 얻기
pw.println(msg); //대화명 전송
pw.flush(); //즉시 전송
input.requestFocus(); //채팅 입력란에 커서를 놓는다.
while(true){
msg = br.readLine(); //채팅 내용받기
ta_list.append(msg+"\n");
}//end while
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new GUIChatClient();
}
}
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
위지윅 에디터 종류 (0) | 2010.02.26 |
---|---|
[스크랩] HTML과 form 관련 태그 - input (0) | 2010.02.20 |
채팅프로그램 Server (0) | 2009.10.08 |
자바 플래시 XML 채팅 서버 (0) | 2009.10.08 |
버튼 클릭과 동시에 textarea내용이 클립보드로 저장되는 소스 + 위지윅 프로그램 소스 (0) | 2009.09.30 |