8/23 - 채팅 소스, 서버 구축

2012. 8. 23. 17:23·IT & programming/Java
반응형

import java.net.*;
import java.util.*;

public class MultiServer{       
       
   ServerSocket		sc; // 서버 소켓
   Vector<Thread>		clients; // 클라이언트 목록
   ClientThread			client; // 클라이언트 쓰레드
   Iterator<Thread>   clientsEn; // 클라이언트 목록 검색 : Enumeration 
  // Enumeration			clientsEn;


// 메인 메소드
       public static void main(String args[]){ 
         
			 MultiServer ms=null; // 채팅 서버 초기화

			 try {
					    ms=new MultiServer(); // 채팅서버 객체 생성
						ms.welcomeClients(); // 메시징

			 } catch(Exception e){
					 System.out.println("main:"+e);

			 } // try
      } 

       // 서버 소켓 초기화 : port !
      
       public MultiServer() throws Exception{

			   sc=new ServerSocket(7777);
               clients=new Vector<Thread>();
       }

       // 메시징(messaging) : 클라이언트가 접속(connection)하였을 때(accept)
       // 접속에 대한 메시지를 전함. 클라이언트(누리꾼 : Thread)를 등록
     
       public void welcomeClients() throws Exception{

			  while(true) {
								Socket socket=sc.accept(); // 클라이언트의 소켓 접속을 승인(accept)
								client=new ClientThread(socket, this);

								addClient(client); // 클라이언트(채팅서버) 목록에 추가
								client.setDaemon(true); // p.641
								client.start(); // 쓰레드(클라이언트) 시작 : 누리꾼이 활동을 시작
              }
       }

       // 클라이언트를  채팅서버의 목록에 추가
     
       public synchronized void addClient(Thread clientThread){

			  clients.add(clientThread);
              System.out.println("전체 클라이언트들 : "+clients.size() + "명");
       }

       //메시지를 균등하게(쓰레드 : 싱크로나이제이션) 전송[]
    
       public synchronized void broadCast(String message){

    	   clientsEn = clients.iterator();
    	   
    	   while(clientsEn.hasNext())
    		   ((ClientThread)clientsEn.next()).sendMessage(message);
    	   

       }
       
	// 클라이언트(누리꾼) 목록 균등하게 전송 
	
	 public void broadClientList(){

	     String re="";

	     for(Thread th : clients)
	    	 re +=((ClientThread)th).nickName+"|";
	     /*
		  for(int i=0; i<clients.size(); i++)
			   re+=((ClientThread)clients.get(i)).nickName+"|";
 	      */
			   re=re.substring(0,re.length()-1);

		 broadCast("001"+re); // 응답메시지를 균등하게 전송
	 }
		   
	 // 채팅서버(목록)로부터 클라이언트(누리꾼)을 삭제
	
	 public synchronized void deleteFromServer(ClientThread clientThread){

				  clients.remove(clientThread);
				  System.out.println(clients.size()+" left in server");

	    }
	}

 

서버 구축 클래스

반응형
저작자표시 비영리 변경금지 (새창열림)

'IT & programming > Java' 카테고리의 다른 글

8/23 - 채팅 소스, 채팅 클라이언트 부분  (0) 2012.08.23
8/23 - 채팅 소스, 클라이언트 쓰레드 부분  (0) 2012.08.23
8/22 - I/O, 스트림, IOEx 예제문제  (0) 2012.08.22
8/21 - AWT, 로그인 예제, Adapter클래스 이용  (0) 2012.08.21
8/20 - AWT, 로그인 창 예제  (0) 2012.08.20
'IT & programming/Java' 카테고리의 다른 글
  • 8/23 - 채팅 소스, 채팅 클라이언트 부분
  • 8/23 - 채팅 소스, 클라이언트 쓰레드 부분
  • 8/22 - I/O, 스트림, IOEx 예제문제
  • 8/21 - AWT, 로그인 예제, Adapter클래스 이용
찬파
찬파
삶과 직장에서 경험하는 모든 경우를 기록
  • 찬파
    Trouble-shooting
    찬파
  • 전체
    오늘
    어제
    • All (80)
      • Daily (4)
        • Talk (2)
        • Work (2)
      • 육아 (5)
        • 육아일기 (1)
        • 이유식유아식 (4)
      • 내돈내산 (3)
      • IT & programming (59)
        • C# (1)
        • C++ (5)
        • Java (30)
        • Miplatform (3)
        • Oracle (2)
        • MSSQL (9)
        • UML (2)
        • Tip (2)
        • Error (4)
        • AI (1)
      • Entertainment (1)
      • 동네소식 (0)
      • Game (8)
  • 블로그 메뉴

    • HOME
    • GUEST BOOK
    • ADMIN
    • WRITE
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Adapter
    대항해시대오리진
    19개월
    0803
    유아식
    0801
    0806
    AWT
    0802
    0820
    mssql
    0823
    문자열
    유아식반찬
    대항해시대
    채팅
    java
    0807
    0731
    아기반찬
    내돈내산
    Oracle
    서버
    C언어
    대항해의길
    마이플랫폼
    18개월
    0808
    0821
    이클립스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
찬파
8/23 - 채팅 소스, 서버 구축
상단으로

티스토리툴바