Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Servlet과 Applet간의 TCP/IP 통신
 
Applet과 Servlet간의 TCP/IP를 이용하여 서로 통신하는 예를 Chatting을 이용하여 구현해보자 ( 2003/04/01 ) 501
Written by ienvyou - 최지웅
1 of 2
 

이번 아티클의 주제는 Applet과 Servlet을 이용한 Chatting 이다. Applet에서는 Client Socket을 이용하고 
Servlet에서는 Server Socket을 이용하여 서로 통신을 하게 된다.

▶ Servlet의 작동

흔히 chatting은 Server application과 Client Application혹은 Applet으로 만들어 진다

이번에는 Server를 Servlet으로 구현 하고 Client를 Applet으로 혹은 Application으로 접속하는 
Program을 만들어 보도록 하자

Server가 Servlet으로 만들어 지면 그만큼 Code가 줄어 들고 multi Thread로 동작하는 특성을 살린다면
상당히 간편하게 구현 하실수 있다. 또한 기존에 Servlet이나 JSP로 만들어진 Web Site에 Chatting을 
붙이기 위해서 별도의 Server Application을 만들지 않고도 가능하다.

먼저 Servlet을 보도록 하자.

ChatServlet.java 


import java.net.*;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class ChatServlet extends HttpServlet implements Runnable {
	

	public void init(ServletConfig conf) throws ServletException {
		super.init(conf);
		Thread t = new Thread(this);
		t.setDaemon(true);
		t.start();	
	}
	
    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException {
        PrintWriter pw=null;
        res.setContentType("text/html");
        try {
            pw = res.getWriter();
        } catch(IOException e) { System.err.println("getWriter failed"); }
        pw.println("<html>");
        pw.println("<head>");
        pw.println("<title>Test Chat Applet</title>");
        pw.println("</head>");
        pw.println("<body>");
        pw.println("<applet  codebase=\"../../\" code=\"ChatClient.class\"  width=450 height=300>");
        pw.println("</applet>");
        pw.println("</body>");
        pw.println("</html>");
        pw.close();
    }

    public void run() {
        ServerSocket ss;
        try {
            ss = new ServerSocket(7777);
        } catch(IOException e) {
            System.err.println("ServerSocket failed");
            return;
        }
        while(true) {
            Socket s = null;
            try {
                s = ss.accept();
            } catch (IOException e) { System.err.println("accept failed"); }
            ChatThread ct = new ChatThread(s);
            ct.setDaemon(true);
            ct.start();
        }
    }

}

class ChatThread extends Thread {
    static Vector v = new Vector();
    Socket s;

    public ChatThread(Socket s) {
        this.s = s;
    }

    public void run() {
        InputStream is=null;
        OutputStream os=null;
        try {
            is = s.getInputStream();
        } catch(IOException e) { System.err.println("getInputStream failed"); }
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        try {
            os = s.getOutputStream();
        } catch(IOException e) { System.err.println("getOutputStream failed"); }
        PrintWriter pw = new PrintWriter(os, true);
        v.addElement(pw);
        
        while(true) {
            String s=null;
            try {
                s = br.readLine();
                if(s == null) {
                    return;
                } 
            } catch(IOException e) { 
                System.err.println("readLine failed");
                return;
            }
            for(int i=0; i<v.size(); i++) {
                PrintWriter p = (PrintWriter)v.elementAt(i);
                p.println(s+"|"+v.size());
                if(p.checkError()) {	
                    v.removeElementAt(i); 
                    i--; 
                }
            }
        }
    }
}
 
1 2
References
 
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD