java 자바 귓속말 소스 질문입니다.
-
게시물 수정 , 삭제는 로그인 필요
--클라
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class PClient extends Frame implements Runnable, ActionListener{
static String IP = "localhost";
TextArea cView=new TextArea("", 1,1,1);
TextField cBox=new TextField("");
TextField idBox=new TextField();
TextField roomBox=new TextField("0");
Label pInfo=new Label("월드채팅: 명");
Label pInfo2=new Label("친구목록: 명");
Label pInfo4=new Label("@@@");
java.awt.List pList=new java.awt.List();
java.awt.List pList2=new java.awt.List();
Button aButton=new Button("그룹채팅입장");
Button bButton=new Button("월드채팅으로");
Button cButton=new Button("친구 관리");
Button dButton=new Button("파일 전송");
Button eButton=new Button("기능 설명");
BufferedReader reader;
PrintWriter writer;
Socket socket;
int roomNumber=1;
String idName=null;
int isRoot=0;
public PClient(){
setLayout(null);
Panel p=new Panel();
p.setLayout(new GridLayout(3,3));
p.add(new Label("아 이 디 :", 1));p.add(idBox);//idBox.setEditable(false);
p.add(new Label("방 번 호 :", 1)); p.add(roomBox);
p.add(aButton); p.add(bButton);
aButton.setEnabled(false);
p.setBounds(490,50, 200,100);
cView.setEditable(false);
Panel p5=new Panel();
p5.setLayout(new BorderLayout());
p5.add(eButton,"North");
p5.add(new Label("방 장 :", 1),"West");
p5.add(pInfo4,"Center");
p5.add(dButton,"South");
p5.setBounds(490,180,200,100);
Panel p2=new Panel();
p2.setLayout(new BorderLayout());
p2.add(pInfo,"North");
p2.add(pList,"Center");
p2.setBounds(490,280,200,100);
Panel p4=new Panel();
p4.setLayout(new BorderLayout());
p4.add(pInfo2,"North");
p4.add(pList2,"Center");
p4.add(cButton,"South");
p4.setBounds(490,380,200,200);
Panel p3=new Panel();
p3.setLayout(new BorderLayout());
p3.add(cView,"Center");
p3.add(cBox, "South");
p3.setBounds(10, 50, 470,530);
add(p); add(p5); add(p2);add(p4); add(p3);
cBox.addActionListener(this);
aButton.addActionListener(this);
bButton.addActionListener(this);
cButton.addActionListener(this);
dButton.addActionListener(this);
eButton.addActionListener(this);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
setSize(700,600);
setVisible(true);
connect();
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==cBox){
String msg=cBox.getText();
if(msg.length()==0)return;
if(msg.length()>=30)msg=msg.substring(0,30);
try{
writer.println("[MSG]"+msg);
cBox.setText("");
}catch(Exception ie){}
}
else if(ae.getSource()==aButton){
try{
if(Integer.parseInt(roomBox.getText())<1){
cView.append("방번호는 1이상이어야합니다.\n");
return;
}
writer.println("[ROOM]"+Integer.parseInt(roomBox.getText()));
roomBox.setEditable(false);
cView.setText("");
}catch(Exception ie){
cView.append("입력하신 사항에 오류가 았습니다.\n");
}
}
else if(ae.getSource()==bButton){
try{
goToWaitRoom();
}catch(Exception e){}
}
else if(ae.getSource()==cButton){
try{
FindFriend FF=new FindFriend();
}catch(Exception e){}
}
else if(ae.getSource()==dButton){
try{
}catch(Exception e){}
}
else if(ae.getSource()==eButton){
try{
}catch(Exception e){}
}
}
void goToWaitRoom(){
if(idName==null){
String name=idBox.getText().trim();
if(name.length()<=2 || name.length()>10){
cView.append("아이디는 3~10자만 허용합니다.\n");
idBox.requestFocus();
return;
}
idName=name;
writer.println("[NAME]"+idName);
idBox.setText(idName);
idBox.setEditable(false);
roomBox.setEnabled(true);
}
cView.setText("");
writer.println("[ROOM]0");
cView.setText("월드채팅 입장.\n");
roomBox.setText("0");
roomBox.setEnabled(true);
aButton.setEnabled(true);
bButton.setEnabled(false);
}
public void run(){
String msg;
try{
while((msg=reader.readLine())!=null){
if(msg.startsWith("[ROOM]")){
if(!msg.equals("[ROOM]0")){
aButton.setEnabled(false);
bButton.setEnabled(true);
cView.append(msg.substring(6)+"번 방에 입장하셨습니다.\n");
}
else cView.append("대기실에 입장하셨습니다.\n");
roomNumber=Integer.parseInt(msg.substring(6));
}
else if(msg.startsWith("[FULL]")){
cView.append("방이 차서 입장할 수 없습니다.\n");
}
else if(msg.startsWith("[PLAYERS]")){
nameList(msg.substring(9));
}
else if(msg.startsWith("[ENTER]")){
pList.add(msg.substring(7));
playersInfo();
cView.append("["+ msg.substring(7)+"]님이 입장하였습니다.\n");
}
else if(msg.startsWith("[EXIT]")){
pList.remove(msg.substring(6));
playersInfo();
cView.append("["+msg.substring(6)+
"]님이 다른 방으로 입장하였습니다.\n");
}
else if(msg.startsWith("[DISCONNECT]")){
pList.remove(msg.substring(12));
playersInfo();
cView.append("["+msg.substring(12)+"]님이 접속을 끊었습니다.\n");
}
else cView.append(msg+"\n");
}
}catch(IOException ie){
cView.append(ie+"\n");
}
cView.append("접속이 끊겼습니다.\n");
}
void playersInfo(){
int count=pList.getItemCount();
if(roomNumber==0)
pInfo.setText("월드 채팅: "+count+"명");
else pInfo.setText(roomNumber+" 번 방: "+count+"명");
}
.
void nameList(String msg){
pList.removeAll();
StringTokenizer st=new StringTokenizer(msg, "\t");
while(st.hasMoreElements())
pList.add(st.nextToken());
playersInfo();
}
void connect(){
try{
cView.append("서버에 연결시작.\n");
socket=new Socket(IP, 8888);
cView.append("연결 성공.\n");
cView.append("아이디를 입력하고 대기실입장을 누르세요.\n");
reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(), true);
new Thread(this).start();
}catch(Exception e){
cView.append(e+"\n\n연결 실패..\n");
}
}
public static void main(String[] args){
new PClient();
}
}
--서버
import java.net.*;
import java.io.*;
import java.util.*;
public class PServer{
private ServerSocket server;
private MManager mMan=new MManager();
public PServer(){}
void startServer(){
try{
server=new ServerSocket(8888);
System.out.println("서버소켓이 생성완료.");
while(true){
Socket socket=server.accept();
CThread ot=new CThread(socket);
ot.start();
mMan.add(ot);
System.out.println("접속자 수: "+mMan.size());
}
}catch(Exception e){
System.out.println(e);
}
}
public static void main(String[] args){
PServer server=new PServer();
server.startServer();
}
class CThread extends Thread{
private int roomNumber= 1;
private String idName=null;
private Socket socket;
private boolean ready=false;
private BufferedReader reader;
private PrintWriter writer;
CThread(Socket socket){
this.socket=socket;
}
Socket getSocket(){
return socket;
}
int getRoomNumber(){
return roomNumber;
}
String getUserName(){
return idName;
}
boolean isReady(){
return ready;
}
public void run(){
try{
reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(), true);
String msg;
while((msg=reader.readLine())!=null){
if(msg.startsWith("[NAME]")){
idName=msg.substring(6);
}
else if(msg.startsWith("[ROOM]")){
int roomNum=Integer.parseInt(msg.substring(6));
if( !mMan.isFull(roomNum)){
if(roomNumber!= 1)
mMan.sendToOthers(this, "[EXIT]"+idName);
roomNumber=roomNum;
writer.println(msg);
writer.println(mMan.getNamesInRoom(roomNumber));
mMan.sendToOthers(this, "[ENTER]"+idName);
}
else writer.println("[FULL]");
}
else if(msg.startsWith("[MSG]")){//msg로 시작될때
mMan.sendToRoom(roomNumber,
"["+idName+"]: "+msg.substring(5));
// 룸넘버 내부에 있는 접속자들한테 idname + 메세지 뿌려줘라
}
}
}catch(Exception e){
}finally{
try{
mMan.remove(this);
if(reader!=null) reader.close();
if(writer!=null) writer.close();
if(socket!=null) socket.close();
reader=null; writer=null; socket=null;
System.out.println(idName+"님이 접속을 끊었습니다.");
System.out.println("접속자 수: "+mMan.size());
mMan.sendToRoom(roomNumber,"[DISCONNECT]"+idName);
}catch(Exception e){}
}
}
}
class MManager extends Vector{
MManager(){}
void add(CThread ot){
super.add(ot);
}
void remove(CThread ot){
super.remove(ot);
}
CThread getOT(int i){
return (CThread)elementAt(i);
}
Socket getSocket(int i){
return getOT(i).getSocket();
}
void sendTo(int i, String msg){
try{
PrintWriter pw= new PrintWriter(getSocket(i).getOutputStream(), true);
pw.println(msg);
}catch(Exception e){}
}
int getRoomNumber(int i){
return getOT(i).getRoomNumber();
}
synchronized boolean isFull(int roomNum){
if(roomNum==0)return false;
int count=0;
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i))count++;
if(count>=10)return true;
return false;
}
void sendToRoom(int roomNum, String msg){
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i))
sendTo(i, msg);
}
void sendToOthers(CThread ot, String msg){
for(int i=0;i<size();i++)
if(getRoomNumber(i)==ot.getRoomNumber() && getOT(i)!=ot)
sendTo(i, msg);
}
String getNamesInRoom(int roomNum){
StringBuffer sb=new StringBuffer("[PLAYERS]");
for(int i=0;i<size();i++)
if(roomNum==getRoomNumber(i))
sb.append(getOT(i).getUserName()+"\t");
return sb.toString();
}
}
}
대충이런씩으로 구성되있는대 여기서 귀속말 소스쫌 추가해주세요 ^^
#java 자바스크립트 실행 #java 자바 #west java 자바 #자바 import java.util.* #자바 java.lang.nullpointerexception #자바 java.lang.arrayindexoutofboundsexception #자바 환경변수 java_home #자바스크립트 java 함수 호출 #자바 java.util.nosuchelementexception #자바 java.util.date