자바채팅 프로그램 소스인데요,,
곰돌이
아 제가 이 채팅 프로그램소스를 수정해보고 싶은데요
내용을 잘 모르겠어요.ㅠ
어떻게 돌아가는건지 간략하게 주석 좀 달아주셨으면 감사하겠습니다.***ChatServer.java****
import java.io.*;
import java.net.*;
import java.util.Vector;
public class ChatServer {
ServerSocket ss; //java.net
Socket s; //java.net
Vector v; //VectorThread v
public ChatServer(){
v=new Vector(5,5);//v=new VectorThread(5,5);
System.out.println(서버가 시작되었습니다.);
}
public void giveAndTake(){
try{
ss=new ServerSocket(5420);
ss.getReuseAddress() ;//ServerSocket port 바로 다시사용
while(true){
s=ss.accept();
ServerSocketThread svrth=new ServerSocketThread(this,s);
addClient(svrth);
svrth.start();
}
}catch(Exception ee){ee.printStackTrace();}
}
public void addClient(Thread tr){
v.addElement(tr);
System.out.println(Client 1명 입장, 총 +v.size()+명);
}
public void removeClient(Thread tr){
v.removeElement(tr);
System.out.println(Client 1명 퇴장 총 +v.size()+명);
}
public void broadCasting(String sbc){
for(int i=0;iv.size();i++){
ServerSocketThread svtr=(ServerSocketThread)v.elementAt(i);
svtr.sendMessage(sbc);
}
}
}
***ChatServerMain.java****
public class ChatServerMain{
public static void main(String[] args) {
ChatServer server=new ChatServer();
server.giveAndTake();
}
}
*****ClientGui******
public class ClientGuiMain{
public static void main(String[] args) {
StartingJFrame frame=new StartingJFrame();//프레임
ClientGui bp=new ClientGui(frame, 127.0.0.1, 5420);//패널
bp.giveAndTake();
frame.setMainJpanel(bp);
frame.setSize(550,400);
frame.validate();
}
}
****ServerSocketThread******
import java.io.*;
import java.net.*;
public class ServerSocketThread extends Thread{
Socket s1;
ChatServer st;
PrintWriter pw;
BufferedReader br;
String name;
String threadName=Thread;
public ServerSocketThread(ChatServer st,Socket s1){
this.s1=s1;
this.st=st;
threadName=getName();
System.out.println(s1.getInetAddress()+ 님이 입장하였습니다.);
System.out.println(Thread Name: +threadName);
}
public void sendMessage(String str){
pw.println(str);
}
public void run(){
try{
br=new BufferedReader(new InputStreamReader(s1.getInputStream()));
pw=new java.io.PrintWriter(s1.getOutputStream(),true);
sendMessage(대화자 이름을 넣으세요:);
name=br.readLine();
st.broadCasting([+name+]+님이 입장 하셨습니다.);
while(true){
String strin=br.readLine();
st.broadCasting([+name +: ]+strin);
}
}catch(Exception e){
System.out.println(threadName+ 퇴장했습니다.);
st.removeClient(this);
}finally{
try{
s1.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
******StartingJFrame*******
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class StartingJFrame extends JFrame {
private static final long serialVersionUID=122454214237L;//JAVA5
private JPanel mainp;
public StartingJFrame() {
System.out.println(this.getClass().getName()+ Start!!);
inits();//JFrme에 기본페널을 붙이기 그리고 중앙에 놓기
}
private void inits() {
//--------------필수---------------//
mainp = (JPanel) this.getContentPane();
mainp.setLayout(new BorderLayout());//중앙을 사용하기 위해서
this.setSize(new Dimension(400, 300));// this.setSize(400,300)//크기
initFrame();//중앙에 붙이기
//------------타이틀----------------//
this.setTitle(this.getClass().getName());//JFrame에 이름 붙이기
}
public void addListeners(){//JFrame에 관련된 리슨너
//-------귀달기-------//
}
private void initFrame(){//중앙에 놓기
Dimension monitorSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height monitorSize.height) {
frameSize.height = monitorSize.height;
}
if (frameSize.width monitorSize.width) {
frameSize.width = monitorSize.width;
}
int locationX=(monitorSize.width - frameSize.width) / 2;
int locationY=(monitorSize.height - frameSize.height) / 2;
this.setLocation(locationX, locationY);
this.setVisible(true);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);//X로 끄기
}
public void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.out.println(this.getClass().getName()+ End!!);
System.exit(1);//프로그램 끝내기
}
}
public void setMainJpanel(javax.swing.JComponent c){
mainp.add(c);
}
}