반응형
스레드가 어려움
몇시간을 해도 통신이 잘 안됨
등등
프로젝트를 진행하면서 이런 문제점이 생길거 같아서 미리 이클래스를 작성 하였습니다.
현재로도 하나의 테스트 프로그램만을 작성해 보았으므로
다른 프로그램에서는 어떻게 동작할지는 예상할 수 없습니다 ^^;;
작성해본 간단한 채팅 프로그램의 서버와 클라이언트 입니다.
이것만 보셔도 대충 이해가 가실거라고 생각 됩니다.
--- Server ---
package yhg.comm.test; import java.io.IOException; import yhg.comm.message.MSGChat; import yhg.comm.message.MSGEnterClient; import yhg.comm.message.MSGLeaveClient; import yhg.comm.message.Message; import yhg.comm.server.CommClientManager; import yhg.comm.server.CommServer; import yhg.comm.server.ICommClientManagerEvent; import yhg.comm.server.ICommServerEvent; public class ChatServer { public static void main(String[] args){ try { final CommServer server = new CommServer(1000); server.setClientManagerEvent(new ICommClientManagerEvent(){ public void onReceiveMessage(CommClientManager cm, Message msg) { int sender = server.getClientNumber(cm); MSGChat content = (MSGChat)msg; System.out.println("["+cm.getSocket().getLocalAddress().toString()+"] receive Message : "+msg); switch(msg.getType()){ case Message.type_MSGChat: MSGChat chat = new MSGChat(); chat.setMessage("["+sender+"] "+content.getMessage()); try { server.sendAll(sender, chat); } catch (IOException e) { e.printStackTrace(); } break; } } public void onSendMessage(CommClientManager cm, Message msg) { } }); server.setServerEvent(new ICommServerEvent(){ public void onEnterClient(CommClientManager cm) { int newClient = server.getClientNumber(cm); MSGEnterClient ent = new MSGEnterClient(); ent.setNumber(newClient); try { server.sendAll(newClient, ent); System.out.println("["+cm.getLocalAddress().toString()+"] Connect"); } catch (IOException e) { e.printStackTrace(); } } public void onLeaveClient(CommClientManager cm) { int clientNum = server.getClientNumber(cm); MSGLeaveClient ent = new MSGLeaveClient(); ent.setNumber(clientNum); try { server.sendAll(clientNum, ent); System.out.println("["+cm.getLocalAddress().toString()+"] Disconnect"); } catch (IOException e) { e.printStackTrace(); } } }); server.start(); } catch (IOException e) { e.printStackTrace(); } } }
--- Client ---
package yhg.comm.test; import java.io.IOException; import java.net.UnknownHostException; import java.util.NoSuchElementException; import java.util.Scanner; import yhg.comm.client.CommClient; import yhg.comm.client.ICommClientEvent; import yhg.comm.message.MSGChat; import yhg.comm.message.MSGEnterClient; import yhg.comm.message.MSGLeaveClient; import yhg.comm.message.Message; public class ChatClient { public static void main(String[] args){ try { CommClient client = new CommClient("127.0.0.1",1000); client.setClientEvent(new ICommClientEvent(){ public void onReceiveMessage(Message msg) { try{ switch(msg.getType()){ case Message.type_MSGEnterClient: MSGEnterClient enterMsg = (MSGEnterClient)msg; System.out.println("-- "+enterMsg.getNumber()+" 님이 입장 하였습니다 --"); break; case Message.type_MSGLeaveClient: MSGLeaveClient leaveMsg = (MSGLeaveClient)msg; System.out.println("-- "+leaveMsg.getNumber()+" 님이 퇴장 하였습니다 --"); case Message.type_MSGChat: MSGChat chat = (MSGChat)msg; System.out.println(chat.getMessage()); break; } } catch(ClassCastException e){} } public void onSendMessage(Message msg) { } }); client.start(); Scanner scanner = new Scanner(System.in); while(true){ String input = scanner.next(); if(!input.equals("")){ MSGChat chat = new MSGChat(); chat.setMessage(input); client.send(chat); } } } catch (UnknownHostException e) { } catch (IOException e) { } catch (NoSuchElementException e){ } } }
문제점이 있으시면 바로바로 알려주세요~
반응형
'Project' 카테고리의 다른 글
[Java Communication] 버그 수정 (0) | 2010.03.10 |
---|---|
[Java Communication] Reference (2) | 2010.03.10 |
[Java Communication] 메세지 클래스 (0) | 2010.03.09 |
[UnitTest] SameTest (0) | 2009.03.18 |
PHP Unit Test :: sameTest (0) | 2008.03.22 |