http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=244 [º¹»ç]
¢Á ÀÚ¹Ù ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö
nURL(Uniform Resource Locator)
protocol://hostname[:port]/path/filename#section
ÇÁ·ÎÅäÄÝ¿¡´Â ´ÙÀ½°ú °°Àº °ÍÀÌ ÀÖ´Ù.
file : ÇÏµå µð½ºÅ©¿¡ ÀÖ´Â ÆÄÀÏ
ftp : FTP ¼¹ö¿¡ ¿¬°á
http : À¥¼¹ö¿¡ ¿¬°á
gopher : gopher ¼¹ö¿¡ ¿¬°á
news : usenet ´º½º ±×·ì¿¡ ¿¬°á
telnet : ÅÚ³Ý ¼ºñ½º¸¦ ÀÌ¿ë
wais : wais ¼¹ö¿¡ ¿¬°á
import java.awt.*; import java.net.*; import java.applet.Applet; public class URLButton extends Applet { URL url = null; String title = null; public void init() { String urlString = null; setLayout(new GridLayout(1,1)); title = getParameter("title"); if(title == null) title = "URLButton"; urlString = getParameter("url"); if(urlString == null) urlString = "http://"; try{ url = new URL(urlString); }catch(MalformedURLException e) { System.out.println("Invalid URL : " + urlString); } Button site = new Button(title); add(site); resize(100, 60); } public boolean action(Event e, Object arg) { if(e.target instanceof Button) { getAppletContext().showDocument(url); } return false; } }
¡×URLButton.java
<html> <body bgcolor="#ffffff"> <applet code = URLButton.class width=100 height=50> <param name=title value="WebZine"> <param name=url value="http://203.253.23.3/special.shtml"> </applet> <applet code = URLButton.class width=100 height=50> <param name=title value="BBS"> <param name=url value="http://203.253.24.55/~bbs/"> </applet> <applet code = URLButton.class width=100 height=50> <param name=title value="WebNews"> <param name=url value="http://203.253.23.3/"> </applet> <applet code = URLButton.class width=100 height=50> <param name=title value="³»¿ÜÄÄÇ»ÅÍ"> <param name=url value="http://www.nwcom.co.kr"> </applet> </html>
¡×URLButton.html
¡×½ÇÇà ¿¹
nMalformedURLException ÁöÁ¤µÈ URLÀÌ À¯È¿ÇÏÁö ¾ÊÀ½À» ³ªÅ¸³½´Ù.
ngetAppletContext
¡×¾ÖÇø´ÀÌ ³ªÅ¸³¯ ºê¶ó¿ìÀú¸¦ Ç¥ÇöÇÑ´Ù.
¡×¾ÖÇø´¿¡ ´ëÇÑ AppletContext¸¦ ±¸ÇÑ´Ù.
nshowDocument
public void showDocument( URL url );
public void showDocument( URL url, String target );
¡×ºê¶ó¿ìÀú¿¡ »õ·Î¿î ¹®¼¸¦ ¿¬´Ù.
¡×parameter
¡×url ºê¶ó¿ìÀú°¡ ¿ÀÇÂÇÒ ¹®¼¸¦ °¡¸®Å´
°ª ÀǹÌ
"_self" "_parent" "_top" "_blank" ¾ÖÇø´ÀÌ »ðÀÔµÈ °Í°ú µ¿ÀÏÇÑ ÇÁ·¹ÀÓ ¾ÖÇø´ÀÌ »ðÀÔµÈ ÇÁ·¹ÀÓÀÇ ºÎ¸ð ÇÁ·¹ÀÓ ¾ÖÇø´ÀÌ ³ªÅ¸³¯ ÃÖ»óÀ§ ¼öÁØÀÇ À©µµ¿ì »õ·Î¿î ÃÖ»óÀ§ ¼öÁØÀÇ À̸§ ¾ø´Â ÇÁ·¹ÀÓ
¡×target ³ªÅ¸³¾ »õ·Î¿î ¹®¼
n¼ÒÄÏ
ÀϹÝÀûÀ¸·Î C ¾ð¾î¸¦ ÀÌ¿ëÇؼ ³×Æ®¿öÅ© ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °æ¿ì, ÇÁ·Î±×·¥ ÀýÂ÷´Â
´ÙÀ½ ±×¸²°ú °°´Ù.
¡×¼¹ö ÇÁ·Î±×·¥Àº ¼ÒÄÏÀ» »ý¼ºÇÏ°í, bind()¸¦ ÀÌ¿ëÇؼ ¼ÒÄÏ°ú ¾îµå·¹½º ¹× Æ÷Æ®¸¦ °áÇÕ½ÃŲ´Ù.
¡×listen() ÇÔ¼ö¸¦ È£ÃâÇÏ°í, bind()ÇÔ¼ö¸¦ È£ÃâÇؼ Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¿äûÀÌ ¿Ã ¶§±îÁö
ºí·ÏµÇ¾î¼ ±â´Ù¸°´Ù.
¡×bind() ÇÔ¼ö´Â Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¿äûÀÌ ¿À¸é Ŭ¶óÀ̾ðÆ®¿Í Åë½ÅÇÒ ¼ö ÀÖ´Â ¼ÒÄÏÀ»
¸¸µé¾î¼ ¸®ÅÏÇÑ´Ù.
¡×¸®ÅÏµÈ ¼ÒÄÏÀ» ÅëÇؼ ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®´Â read()/write() ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ Åë½ÅÇÒ ¼ö ÀÖ´Ù.
¡×Ŭ¶óÀ̾ðÆ®¿¡¼´Â ¼ÒÄÏÀ» »ý¼ºÇÏ°í, connect() ÇÔ¼ö¸¦ ÅëÇؼ ¼¹ö¿¡ ¿¬°áÀ» ½ÃµµÇÑ´Ù.
¡×connect()¸¦ È£ÃâÇϸé, ¼¹ö¿¡¼´Â accept() ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. ¼¹ö¿Í ¿¬°áµÇ¸é ¼ÒÄÏÀ»
ÅëÇØ read/write¸¦ ÇÒ ¼ö ÀÖ´Ù
Server Client
n¼¹ö ¼ÒÄÏ
ÀÚ¹Ù¿¡¼ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§Çؼ´Â java.net ÆÐÅ°Áö¸¦ ÀÌ¿ëÇÑ´Ù.
¡×¼¹öÇÁ·Î±×·¥À» ¸¸µé ¶§´Â ¼ÒÄÏÀ» ¸¸µé°í, bind()ÇÏ°í listen()ÇÏ´Â ÀϵéÀÌ Ç×»ó ¹Ýº¹µÈ´Ù.
¡×ÀÚ¹Ù¿¡¼´Â ÀÌ·¯ÇÑ ¹Ýº¹ ÀÛ¾÷À» Á¦°ÅÇϱâ À§Çؼ ¼¹ö ¼ÒÄÏ(ServerSocket)À̶ó´Â
Ŭ·¡½º¸¦ ¸¸µé¾ú´Ù.
¡×ÇÁ·Î±×·¡¸Ó´Â ¼¹ö ¼ÒÄÏÀ» ¸¸µé¾î¼ accept() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
¡×accept() ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ connectionÀÌ ¿äûµÉ ¶§±îÁö ºí·ÏµÇ¾ú´Ù°¡, ¿äûÀÌ
µé¾î¿À¸é Ŭ¶óÀ̾ðÆ®¿Í Åë½ÅÇÒ ¼ö ÀÖ´Â ¼ÒÄÏÀ» »ý¼ºÇؼ ¸®ÅÏÇØÁØ´Ù.
¡×¼¹ö´Â ¸®ÅÏµÈ ¼ÒÄÏÀ» ÀÌ¿ëÇؼ Ŭ¶óÀ̾ðÆ®¿Í Åë½ÅÇÒ ¼ö ÀÖ´Ù.
¡×Ŭ¶óÀ̾ðÆ®¿¡¼µµ ¸¶Âù°¡Áö·Î ¹Ýº¹µÇ´Â ÀÛ¾÷À» Á¦°ÅÇϱâ À§ÇØ, connect()¶ó´Â ÇÔ¼ö¸¦
È£ÃâÇÒ ÇÊ¿ä°¡ ¾øµµ·Ï ¼ÒÄÏ(Socket)À̶ó´Â Ŭ·¡½º¸¦ ¸¸µé¾ú´Ù.
¡×µû¶ó¼, Ŭ¶óÀ̾ðÆ®¿¡¼´Â ¼ÒÄÏÀ» ¸¸µé°í, ¼ÒÄÏÀ» ÀÌ¿ëÇؼ ¸¸µç I/O ½ºÆ®¸²À» ÀÌ¿ëÇؼ
¼¹ö¿Í Åë½ÅÇÒ ¼ö ÀÖ´Ù.
¼¹ö Ŭ¶óÀ̾ðÆ®
¢Á ³×Æ®¿öÅ©¿Í ¼ÒÄÏ
nŬ¶óÀ̾ðÆ®-¼¹ö ¾îÇø®ÄÉÀ̼Ç
¡×¿¬°á Á᫐ ÇÁ·ÎÅäÄÝ
¡×Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö »çÀÌ¿¡ Àü¿ëÀÇ ¸µÅ©°¡ ¼³Á¤µÈ´Ù.
¡×µÎ ÇÁ·Î¼¼½º »çÀÌ¿¡¼ Àü´ÞµÇ´Â ¸Þ½ÃÁö´Â Á¤È®ÇÑ ¼ø¼´ë·Î Àü´ÞµÇ´Â °ÍÀ» º¸Àå ¹ÞÀ» ¼ö ÀÖ´Ù.
¡×´ëºÎºÐÀÇ ³×Æ®¿öÅ· ¾îÇø®ÄÉÀ̼ÇÀº ½Å·ÚÇÒ ¼ö ÀÖ´Â Åë½Å ÇÁ·ÎÅäÄÝÀÌ ¿ä±¸µÇ¹Ç·Î
¿¬°á Áß½ÉÀûÀÌ´Ù.
¡×¿¹)TCP/IPÀÇ TCP(Transfer Control Protocol)
¡×ºñ¿¬°á¼º ÇÁ·ÎÅäÄÝ
¡×Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö»çÀÌ¿¡ Àü¿ë¼±ÀÌ ¼³Á¤µÇÁö ¾Ê´Â´Ù.
¡×Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö´Â ¸Þ½ÃÁö¸¦ µ¥ÀÌÅͱ׷¥ ÆÐŶ(Datagram Packet)ÇüÅ·Πº¸³»¸ç,
°¢°¢¿¡´Â ¸ñÀûÁöÀÇ ÁÖ¼Ò°¡ µé¾îÀÖ´Ù.
¡×³×Æ®¿öÅ©¿¡¼´Â ÆÐŶÀÌ µé¾îÀÖ´Â ¸ñÀûÁöÀÇ ÁÖ¼Ò¸¦ Çص¶ÇÑ ÈÄ ÀÌ ÆÐŶÀ» ¸ñÀûÁö·Î º¸³½´Ù.
¡×°¢ ÆÐŶ¿¡´Â ÇÙ½ÉÀÌ µÇ´Â ¸Þ½ÃÁö ¿Ü¿¡µµ ¼Û½ÅÀÚ¿Í ¼ö½ÅÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù.
¡×ÆÐŶÀÇ Àü´ÞÀ» º¸Àå¹ÞÀ» ¼ö ¾ø´Ù.
¡×¸Þ½ÃÁöÀÇ Àü´Þ ¼ø¼°¡ Áß¿äÇÏÁö ¾ÊÀº °÷¿¡¼ »ç¿ëµÉ ¼ö ÀÖ´Ù.
¡×¿¹) ŸÀÓ ¼¹ö ¾îÇø®ÄÉÀ̼Ç
TCP/IPÀÇ UDP
nÀÎÅÍ³Ý ÁÖ¼Ò(Internet Address)
¡×ÀÎÅÍ³Ý ID - ÀÎÅͳݿ¡¼ÀÇ ³×Æ®¿öÅ©¸¦ ÁöÁ¤ÇÑ °Í
¡×Subnet ID - Áö¿ª ³×Æ®¿öÅ©(¼ºê³Ý)¸¦ Ç¥ÇöÇÑ°Í
¡×Host ID - ¼ºê³Ý¿¡¼ È£½ºÆ®¿¡ ´ëÇÑ ½Äº°ÀÚ
Internet ID Subnet ID Host ID
203.248 255 2
n¿Ö ¼ÒÄÏÀÌ ÇÊ¿äÇÑ°¡?
¡×¾îÇø®ÄÉÀ̼ǰú ³×Æ®¿öÅ© »çÀÌÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇØ ¼ÒÄÏÀÌ ÇÊ¿äÇÏ´Ù.
¡×Ŭ¶óÀ̾ðÆ®-¼¹ö ¾îÇø®ÄÉÀ̼ǿ¡¼ ´ëºÎºÐÀÇ Åë½ÅÀº Á¡-´ë-Á¡(Point-to-Point),
Áï Åë½ÅÀÇ ³¡Á¡¿¡ ¾îÇø®ÄÉÀ̼Ç(Ŭ¶óÀ̾ðÆ® ¶Ç´Â ¼¹ö)ÀÌ Á¸ÀçÇÏ´Â ÇüÅÂÀÌ´Ù.
¡×¼ÒÄÏÀº ´ÜÀÏ ½Ã½ºÅÛ È¤Àº ¼·Î ´Ù¸¥ ½Ã½ºÅÛ¿¡ Á¸ÀçÇÏ´Â ÇÁ·Î¼¼½º°£ Åë½ÅÀ» À§ÇØ ³¡Á¡
¿ªÇÒÀ» ÇÑ´Ù.
¡×¾îÇø®ÄÉÀ̼ÇÀº »ó´ë¹æ¿¡°Ô ¸Þ½ÃÁö¸¦ º¸³¿À¸·Î½á Åë½ÅÀ» ÇÑ´Ù.
¡×ÀÌ ¸Þ½ÃÁö´Â ³×Æ®¿öÅ©¿¡¼ ¿¬¼ÓµÈ ÆÐŶÀ¸·Î Àü´ÞµÈ´Ù.
¡×¾îÇø®ÄÉÀ̼ÇÀº ÇÊ¿äÇÒ ¶§ ¿î¿µÃ¼Á¦¿¡°Ô ¼ÒÄÏÀ» »ý¼ºÇØ´Þ¶ó´Â ¿äûÀ» ÇÑ´Ù.
¡×½Ã½ºÅÛÀº ¾îÇø®ÄÉÀ̼ÇÀÌ »õ·ÎÀÌ »ý¼ºµÈ ¼ÒÄÏÀ» ÂüÁ¶Çϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â
Á¤¼ö(Small Integer) ÇüÅÂÀÇ ¼ÒÄÏ ½Äº°ÀÚ¸¦ ¸®ÅÏÇÑ´Ù.
nŬ·¡½º¿Í ÀÎÅÍÆäÀ̽º ¼³¸í
Ŭ·¡½º/ÀÎÅÍÆäÀ̽º ¼³¸í
InetAddress ServerSocket Socket DatagramSocket DatagramPacket SocketImpl SocketImplFactory ÀÎÅÍ³Ý ÁÖ¼Ò Ç¥Çö ¼¹ö ¼ÒÄÏ. ¼ÒÄÏ ÀÛ¾÷À» À§ÇÑ ½ÇÁ¦ ±¸Çö¿¡´Â SocketImpl Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ. ¼ÒÄÏ ÀÛ¾÷À» À§ÇÑ ½ÇÁ¦ ±¸Çö¿¡´Â SocketImpl Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. ºñ¿¬°á¼º ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇÑ µ¥ÀÌÅͱ׷¥ ¼ÒÄÏ. Àü´ÞµÇ´Â µ¥ÀÌÅÍ¿Í ¸ñÀûÁö È£½ºÆ®¿¡ ´ëÇÑ »ó¼¼ Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â µ¥ÀÌÅͱ׷¥ ÆÐŶ ½ÇÁ¦ ±¸ÇöÀ» À§Çؼ´Â ²À ¼ºêŬ·¡½ºÈµÇ¾î¾ß ÇÑ´Ù. ServerSocket°ú Socket Ŭ·¡½º¿¡ ´ëÇÑ ½ÇÁ¦ ¼ÒÄÏ ±¸Çö. ÀÌ ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀǵǾî ÀÖ´Â ½ÇÁ¦ SocketImpl ÀνºÅϽº¸¦ »ý¼ºÇϱâ À§ÇÑ ÀÎÅÍÆäÀ̽º
¢Á Client/Server - Stream Socket »ç¿ë
nServer - Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍÀÇ Á¢¼ÓÀ» ¹Þ¾ÆµéÀÌ°í, Ŭ¶óÀ̾ðÆ®·Î µ¥ÀÌÅÍ(String)¸¦ º¸³»°í,
Á¢¼ÓÀ» Á¾·áÇÑ´Ù.
nClient - ¼¹ö·ÎºÎÅÍ º¸³»Áø Á¤º¸¸¦ Àаí, ±× Á¤º¸¸¦ ȸ鿡 Ãâ·ÂÇÑ´Ù.
nServerSocket
public ServerSocket(int port) throws IOException
public ServerSocket(int port, int lisn_time) throws IOException
¡×Parameter
¡×port ¼¹ö°¡ °áÇÕµÉ ·ÎÄà Æ÷Æ® ¹øÈ£
¡×lisn_time ¼¹ö°¡ Æ÷Æ®¿¡¼ Á¢¼ÓÀ» ±â´Ù¸± ½Ã°£
¡à Server
import java.io.*;
import java.net.*;
import java.awt.*;
public class Server extends Frame{
TextArea display;
public Server()
{
super("Server");
display = new TextArea(20, 5);
add("Center", display);
resize(300, 150);
show();
}
public void runServer()
{
ServerSocket server;
Socket connection;
OutputStream output;
try {
server = new ServerSocket(5000, 100);
connection = server.accept(); // Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼ÓÀ» ¹Þ¾ÆµéÀδÙ.
display.setText("Connection received...\n");
display.appendText("Sending data...\n");
output = connection.getOutputStream(); // Ŭ¶óÀ̾ðÆ®·Î µ¥ÀÌÅ͸¦ º¸³½´Ù.
String s = new String("Connection successful\n");
for(int i = 0; i < s.length(); i++)
output.write( (int) s.charAt(i) );
display.appendText("Transmission complete. Closing socket.\n");
connection.close(); // Á¢¼ÓÀ» Á¾·áÇÑ´Ù.
} catch(IOException e){
e.printStackTrace();
}
}
public boolean handleEvent(Event e)
{
if(e.id == Event.WINDOW_DESTROY){
hide();
dispose();
System.exit(0);
}
return super.handleEvent(e);
}
public static void main(String args[])
{
Server s = new Server();
s.runServer();
}
}
nSocket
public Socket(String host, int port) throws IOException;
public Socket(String host, int port, boolean sock_type) throws IOException;
public Socket(InetAddress inet, int port) throws IOException;
public Socket(InetAddress inet, int port, boolean sock_type) throws IOException;
¡×Parameter
¡×host Á¢¼ÓÇÒ È£½ºÆ® ¸Ó½Å À̸§
¡×port ¼¹ö°¡ °áÇÕµÉ ·ÎÄà Æ÷Æ® ¹øÈ£
¡×sock_type µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀÎÁö ½ºÆ®¸² ¼ÒÄÏÀÎÁö¸¦ ³ªÅ¸³»´Â °ª
¡×inet Á¢¼ÓÇÒ È£½ºÆ® ¸Ó½ÅÀÇ InetAddress
ngetLocalHost() ·ÎÄà ȣ½ºÆ®ÀÇ InetAddress¸¦ ±¸ÇÔ
¡à Client
import java.io.*;
import java.net.*;
import java.awt.*;
public class Client extends Frame{
TextArea display;
public Client()
{
super("Client");
display = new TextArea(20, 20);
add("Center", display);
resize(300, 150);
show();
}
public void runClient()
{
Socket client;
InputStream input;
try{
client = new Socket(InetAddress.getLocalHost(),5000);
display.appendText("Created Socket\n");
input = client.getInputStream(); // ¼¹ö·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¹Þ´Â´Ù.
display.appendText("Created input Stream\n");
display.appendText("The text from the server is:\n\t");
char c;
// ¼¹ö·ÎºÎÅÍ ¹ÞÀº µ¥ÀÌÅ͸¦ °³ÇàÀÌ µÉ ¶§±îÁö ÀоîµéÀÎÈÄ, ¹®ÀÚ·Î Çüº¯È¯ ÇÑ´Ù.
while((c = (char) input.read()) != '\n')
display.appendText(String.valueOf(c)); // ¹®ÀÚ¸¦ ¹®ÀÚ¿·Î Ãâ·ÂÇÑ´Ù.
display.appendText("\n");
client.close(); // Ŭ¶óÀ̾ðÆ®¸¦ Á¾·áÇÑ´Ù.
} catch(IOException e){
e.printStackTrace();
}
}
public boolean handleEvent(Event e)
{
if(e.id == Event.WINDOW_DESTROY){
hide();
dispose();
System.exit(0);
}
return super.handleEvent(e);
}
public static void main(String args[])
{
Client c = new Client();
c.runClient();
}
}
¢Á Client/Server - DatagramSocket/DatagramPacket
nDatagramSocket
public DatagramSocket() throws SocketException;
public DatagramSocket(int port) throws SocketException;
¡×ºñ¿¬°á¼º ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇØ ±¸ÇöµÈ Ŭ¶óÀ̾ðÆ®-¼¹ö ¾îÇø®ÄÉÀ̼ǿ¡¼ ¼ÒÄÏÀ» Çü¼ºÇÑ´Ù.
¡×Ŭ¶óÀ̾ðÆ®´Â µ¥ÀÌÅͱ׷¥ ÆÐŶÀ» »ý¼ºÇÒ ¶§, Æ÷Æ® ¹øÈ£¸¦ ÁöÁ¤ÇÔÀ¸·Î½á ¼¹ö¿¡ ÆÐŶÀ» º¸³½´Ù.
¡×ÀÌ Å¬·¡½º´Â ÆÐŶÀ» ó¸®Çϱâ À§ÇÑ send¿Í receive¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ´Ù.
¡×Parameter
¡×port µ¥ÀÌÅͱ׷¥ ¼ÒÄÏÀÌ °áÇÕµÈ ·ÎÄà Æ÷Æ® ¹øÈ£
nDatagramPacket
public DatagramPacket(byte[] buffer, int length);
public DatagramPacket(byte[] buffer, int length, InetAddress dest, int port);
¡×ºñ¿¬°á¼º ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇØ ±¸ÇöµÈ Ŭ¶óÀ̾ðÆ®-¼¹ö ¾îÇø®ÄÉÀ̼ǿ¡¼ ÆÐŶÀ» Çü¼ºÇÑ´Ù.
¡×ÆÐŶÀº DatagramSocket Ŭ·¡½ºÀÇ send ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© target¿¡ Àü´ÞµÈ´Ù.
¡×DatagramSocket Ŭ·¡½ºÀÇ receive ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ÆÐŶÀ» ¹Þ¾ÆµéÀδÙ.
¡×Parameter
¡×buffer µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÏ´Â ¹ÙÀÌÆ® ¹è¿
¡×length µ¥ÀÌÅÍ ¹öÆÛÀÇ ±æÀÌ
¡×inetAddress µ¥ÀÌÅͱ׷¥À» ¹Þ¾ÆµéÀÌ´Â IP ÁÖ¼Ò
¡×port µ¥ÀÌÅͱ׷¥À» ¹Þ¾ÆµéÀÌ´Â Æ÷Æ® ¹øÈ£
¡à Server
import java.io.*;
import java.net.*;
import java.awt.*;
public class Server extends Frame{
TextArea display;
DatagramPacket sendPacket, receivePacket;
DatagramSocket sendSocket, receiveSocket;
public Server()
{
super("Server");
display = new TextArea(20, 10);
add("Center", display);
resize(300, 150);
show();
try{
sendSocket = new DatagramSocket();
receiveSocket = new DatagramSocket(5000);
} catch(SocketException se){
se.printStackTrace();
System.exit(1);
}
}
public void waitForPackets()
{
while(true){
try{
byte array[] = new byte[100]; // ÆÐŶ ¼³Á¤
receivePacket = new DatagramPacket(array, array.length);
receiveSocket.receive(receivePacket); // ÆÐŶÀ» ±â´Ù¸°´Ù.
display.appendText("\nPacket received:" + // ÆÐŶ ÇÁ·Î¼¼½º
"\nFrom host: " + receivePacket.getAddress() +
"\nHost port: " + receivePacket.getPort() +
"\nLength: " + receivePacket.getLength() +
"\nContaining:\n\t");
byte data[] = receivePacket.getData();
String received = new String(data, 0);
display.appendText(received);
// Ŭ¶óÀ̾ðÆ®¿¡¼ ¹ÞÀº ÆÐŶÀÇ ¿¡ÄÚ(echo) Á¤º¸¸¦ ´Ù½Ã Ŭ¶óÀ̾ðÆ®·Î µ¹·Áº¸³½´Ù.
display.appendText("\n\nEcho data to client...");
sendPacket = new DatagramPacket(data, data.length,
receivePacket.getAddress(), 5001);
sendSocket.send(sendPacket);
display.appendText("Packet sent\n");
} catch(IOException e){
display.appendText(e.toString() + "\n");
e.printStackTrace();
}
}
}
public boolean handleEvent(Event e)
{
if(e.id == Event.WINDOW_DESTROY){
hide();
dispose();
System.exit(0);
}
return super.handleEvent(e);
}
public static void main(String args[])
{
Server s = new Server();
s.waitForPackets();
}
}
¡à Client
import java.io.*;
import java.net.*;
import java.awt.*;
public class Client extends Frame{
TextField enter;
TextArea display;
Panel enterPanel;
Label enterLabel;
DatagramPacket sendPacket, receivePacket;
DatagramSocket sendSocket, receiveSocket;
public Client()
{
super("Client");
enterPanel = new Panel();
enterLabel = new Label("Enter message:");
enter = new TextField(20);
enterPanel.add(enterLabel);
enterPanel.add(enter);
add("North", enterPanel);
display = new TextArea(20, 10);
add("Center", display);
resize(400, 300);
show();
try{
sendSocket = new DatagramSocket();
receiveSocket = new DatagramSocket(5001);
} catch(SocketException se){
se.printStackTrace();
System.exit(1);
}
}
public void waitForPackets()
{
while(true){
try{
byte array[] = new byte[100]; // ÆÐŶ ¼³Á¤
receivePacket = new DatagramPacket(array, array.length);
receiveSocket.receive(receivePacket); // ÆÐŶÀ» ±â´Ù¸°´Ù.
display.appendText("\nPacket received:" + // ÆÐŶ ÇÁ·Î¼¼½º
"\nFrom host: " + receivePacket.getAddress() +
"\nHost port: " + receivePacket.getPort() +
"\nLength: " + receivePacket.getLength() +
"\nContaining:\n\t");
byte data[] = receivePacket.getData();
String received = new String(data, 0);
display.appendText(received);
} catch(IOException e){
display.appendText(e.toString() + "\n");
e.printStackTrace();
}
}
}
public boolean handleEvent(Event e)
{
if(e.id == Event.WINDOW_DESTROY){
hide();
dispose();
System.exit(0);
}
return super.handleEvent(e);
}
public boolean action(Event evt, Object o)
{
try{
display.appendText("\nSending packet containing: " + o.toString() + "\n");
String s = o.toString();
byte data[] = new byte[100];
s.getBytes(0, s.length(), data, 0);
sendPacket = new DatagramPacket(data, s.length(),
InetAddress.getLocalHost(), 5000);
sendSocket.send(sendPacket);
display.appendText("Packet sent\n");
} catch(IOException e){
display.appendText(e.toString() + "\n");
e.printStackTrace();
}
return true;
}
public static void main(String args[])
{
Client c = new Client();
c.waitForPackets();
}
}
¢Á ¿ø°Ý È£½ºÆ®¸¦ ¼öÇàÇÏ´Â ³×Æ®¿÷ ¾îÇø®ÄÉÀ̼Ç
n¿ø¸®
¡×¾Ë°í ÀÖ´Â Æ÷Æ®¸¦ ÀÎÅÍ³Ý ¼ÒÄÏÀ¸·Î ¿·Á¸é ÅÚ³Ý Æ÷Ʈó·³ ¿ø°Ý È£½ºÆ®ÀÇ ¼öÇàÀ» ¾Ë·Á¾ß
ÇÑ´Ù.
¡×È£½ºÆ® À̸§À» °®°í ÅؽºÆ® Çʵ带 »ç¿ëÇØ¾ß ÇÑ´Ù.
¡×¼ÒÄÏÀ» ¿¾î¾ß ÇÑ´Ù.
n¹æ¹ý
¡×java.net ÆÐÅ°Áö´Â ÀÎÅÍ³Ý ¼ÒÄÏÀ» ´Ù·ç´Â Ŭ·¡½º¸¦ Æ÷ÇÔÇϸç, ÀÌ Å¬·¡½º¸¦ SocketÀ̶ó
ºÎ¸¥´Ù.
¡×»ý¼ºÀڴ ȣ½ºÆ® À̸§°ú Æ÷Æ® ¹øÈ£¸¦ ÇÒ´çÇϱâ À§ÇØ ¼ÒÄÏÀ» Á¤ÀÇÇÑ´Ù.
¡×È£½ºÆ® À̸§Àº string Çü½ÄÀÌ°í, Æ÷Æ® ¹øÈ£´Â int ÇüÅ·Π¼ÒÄÏÀ» ¿¾î ÀνºÅϽº¸¦ ¼±¾ðÇÑ
´ÙÀ½ ¼ÒÄÏ »ý¼ºÀÚ¸¦ »ç¿ëÇØ ¸¸µç´Ù.
import java.awt.*;
import java.io.*;
import java.net.*;
/* ¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½º */
public class Ping extends Frame implements Runnable{
Socket socket; /* ¿ø°Ý È£½ºÆ®°¡ »ì¾ÆÀÖ´ÂÁö °áÁ¤ÇÏ´Â SocketÀÇ ÀνºÅϽº */
TextField addrField; /* È£½ºÆ® À̸§ÀÌ µé¾î°¥ ÅؽºÆ® Çʵå */
Button stopButton; /* Á¤Áö ¹öÆ° */
TextArea content; /* ¿ø°Ý È£½ºÆ®ÀÇ »óŸ¦ Ãâ·ÂÇÏ´Â ÅؽºÆ® ¿µ¿ª */
Thread thread; /* ¼ÒÄÏÀÇ È°µ¿À¸·ÎºÎÅÍ »ç¿ëÀÚÀÇ È°µ¿À» ºÐ¸®ÇÏ´Â µ¥ »ç¿ëÇÏ´Â ½º·¹µå */
int insertPos; /* ÅؽºÆ® ¿µ¿ª¿¡¼ÀÇ »ðÀÔ À§Ä¡ */
/* »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ »ý¼ºÇÏ´Â »ý¼ºÀÚ */
public Ping()
{
int i;
setTitle("Ping");
setLayout(new BorderLayout());
addrField = new TextField("", 20);
stopButton = new Button("Stop");
content = new TextArea("", 24, 80);
content.setEditable(false);
insertPos = 0;
Panel p = new Panel();
p.setLayout(new FlowLayout());
p.add(addrField);
p.add(stopButton);
add("North", p);
add("Center", content);
thread = new Thread(this);
resize(400, 300);
show();
}
/* ¾×¼Ç À̺¥Æ®¸¦ ´Ù·é´Ù.
* Å°°¡ ´·ÁÁö´Â »óÅ¿¡ µû¶ó ¼ÒÄÏ ½º·¹µå¸¦ ¿°í
* Á¤Áö ¹öÆ°ÀÌ ´·ÁÁö¸é ¼ÒÄÏ ½º·¹µå°¡ Á¤ÁöÇÏ´Â »óŸ¦ ¹Ýȯ
* @param evt - À̺¥Æ® °´Ã¼
* @param obj - À̺¥Æ®°¡ ¹Þ´Â °´Ã¼
*/
public boolean action(Event evt, Object obj)
{
if(evt.target == addrField) {
thread.stop();
thread = new Thread(this);
thread.start();
return true;
}
if(evt.target == stopButton) {
thread.stop();
}
return false;
}
/* ¼ÒÄÏÀ» ¿©´Â ½º·¹µå
* ÅÚ³Ý Æ÷Æ®(23) ¿±â¸¦ ½ÃµµÇÑ´Ù.
*/
public void run()
{
String name;
name = addrField.getText();
try{
try{
socket = new Socket(name, 23);
} catch(UnknownHostException e) {
insertString(name + " : unknown host\n");
return;
}
}catch(IOException e2){
insertString("Unable to open socket\n");
return;
}
insertString(name + " is alive\n");
try{
socket.close();
}catch(IOException e2) {
insertString("IOException closing socket\n");
return;
}
}
/* ÅؽºÆ® ¿µ¿ª ³¡¿¡ ÅؽºÆ®¸¦ ´õÇÏ´Â µ¥ ÇÊ¿äÇÑ ¸Þ¼Òµå
* @param s - ´õÇÒ ÅؽºÆ®
*/
void insertString(String s)
{
content.insertText(s, insertPos);
insertPos += s.length();
}
/* ¾îÇø®ÄÉÀ̼ÇÀÇ ½ÃÀÛÁ¡
* @param args - ¸í·ÉÇà ÀÎÀÚ
*/
public static void main(String args[])
{
new Ping();
}
}
ninsertText(String, int)
public void insertText(String ins_text, int index);
public abstract void insertText(String txt, int pos);
¡×Parameter
¡×ins_text ÁöÁ¤µÈ À妽º¿¡ »ðÀ﵃ ÅؽºÆ®
¡×txt TextArea °´Ã¼¿¡ »ðÀ﵃ ÅؽºÆ®
¡×index/pos »õ·Î¿î ÅؽºÆ®°¡ »ðÀ﵃ À§Ä¡
¢Á HTTP·Î µ¥ÀÌÅÍ ¹Þ±â
n¿ø¸®
¡×ÅؽºÆ® ÇÊµå ¾È¿¡ URLÀÌ µé¾î°¡°í, ÆíÁýÇÒ ¼ö ¾ø´Â ÅؽºÆ® ¿µ¿ª ¾È¿¡ URL·ÎºÎÅÍ ¹Þ¾Æ¿Â
¹®¼¸¦ ³ªÅ¸³»¾î¾ß ÇÑ´Ù.
n¹æ¹ý
¡×URL ¿¬°áÀ» URL Ŭ·¡½º ¾È¿¡ ÀÖ´Â openConnection() ¸Þ¼Òµå¿¡ ÀÇÇØ ¸¸µé¾îÁø´Ù.
¡×URLConnection°ú ¿¬°áµÈ ÀÔ·Â ½ºÆ®¸²Àº GetInputStream() ¸Þ¼Òµå¿¡ ÀÇÇØ °Ë»öµÈ´Ù.
( µ¥ÀÌÅÍ´Â DataInputStream Ŭ·¡½º ¾È¿¡ ÀÖ´Â ¸Þ¼Òµå¸¦ »ç¿ëÇؼ µ¥ÀÌÅÍ ÀÔ·Â ½ºÆ®¸²À»
ÀоîµéÀδÙ.)
¡×ºÐ¸®µÈ ½º·¹µå´Â »ç¿ëÀÚ ÀԷ¿¡ ÀÇÇØ ÇϳªÀÇ ½ºÆ®¸²À¸·Î È°µ¿ÇÏ°Ô µÇ¹Ç·Î µ¥ÀÌÅ͸¦
ºñµ¿±âÀûÀ¸·Î ÀÐÀ» ¼ö ÀÖ´Ù.
¡×»ç¿ëÀÚ°¡ Stop ¹öÆ°À» ´©¸£¸é ½ºÆ®¸² È°µ¿ÀÌ Á¾°áµÈ´Ù.
import java.awt.*;
import java.io.*;
import java.net.*;
/* ¾îÇø®ÄÉÀÌ¼Ç Å¬·¡½º */
public class ViewSource extends Frame implements Runnable{
String s;
URL u;
URLConnection uc; /* ¿¬°áµÉ URL */
TextField location; /* URLÀÌ ÀÔ·ÂµÉ TextField */
TextArea content; /* ¹®ÀåÀÇ ¼Ò½º¸¦ º¸¿©ÁÖ´Â ÅؽºÆ® ¿µ¿ª */
Thread thread; /* ¹®¼¸¦ Àбâ À§ÇØ »ç¿ëµÇ´Â ºÐ¸®µÈ ½º·¹µå */
int insertPos = 0; /* ³»¿ë ¿µ¿ªÀÇ »ðÀÔ À§Ä¡ */
/* »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ »ý¼ºÇÏ´Â »ý¼ºÀÚ */
public ViewSource()
{
int i;
setTitle("View Source");
setLayout(new BorderLayout());
location = new TextField("", 20);
content = new TextArea("", 24, 80);
content.setEditable(false);
Panel p = new Panel();
p.setLayout(new FlowLayout());
p.add(location);
p.add(new Button("Stop"));
add("North", p);
add("Center", content);
thread = new Thread(this);
resize(400, 300);
show();
}
/* Å°°¡ ´·ÁÁö´Â °Í°ú Á¤Áö ¹öÆ°
* @param e - À̺¥Æ® °´Ã¼
*/
public boolean handleEvent(Event e)
{
if((e.target instanceof TextField) && (e.id == Event.ACTION_EVENT)){
thread.stop();
content.replaceText("", 0, insertPos);
thread = new Thread(this);
thread.start();
return true;
}
if((e.target instanceof Button) && (e.id == Event.ACTION_EVENT)){
thread.stop();
return true;
}
return false;
}
/* URL·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÀÐ°í ³»¿ë ¿µ¿ª¿¡ Ç¥½ÃÇÏ´Â ¸Þ¼Òµå */
public void run()
{
try{
u = new URL(location.getText());
}catch(MalformedURLException e) {
}
try{
uc = u.openConnection();
}catch(IOException e){
}
DataInputStream in = null;
try{
in = new DataInputStream(new BufferedInputStream(uc.getInputStream()));
}catch(IOException e){
}
String line;
insertPos = 0;
try{
while((line = in.readLine()) != null)
{
line += "\n";
content.insertText(line, insertPos);
insertPos += line.length();
}
}catch(IOException e){
System.out.println("Error in reading file");
}
}
/* ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀ۵Ǵ °÷
* @param args - ¸í·ÉÇà ÀÎÀÚ
*/
public static void main(String args[])
{
new ViewSource();
}
}
nreplaceText(String, int, int)
public void replaceText(String new_text, int start, int end);
¡×parameter
¡×new_text ÁöÁ¤µÈ À§Ä¡¿¡ ÅؽºÆ®¸¦ ±³Ã¼ÇÒ »õ·Î¿î ÅؽºÆ®
¡×start »õ·Î¿î ÅؽºÆ®¸¦ ±³Ã¼ÇÒ °÷ÀÇ ½ÃÀÛ À§Ä¡
¡×end »õ·Î¿î ÅؽºÆ®¸¦ ±³Ã¼ÇÒ °÷ÀÇ ¸¶Áö¸· À§Ä¡
nopenConnection() URL °´Ã¼¿¡ ÀÇÇØ ÂüÁ¶µÇ´Â °´Ã¼·ÎÀÇ ¿¬°áÀ» ¿¬´Ù.
ngetInputStream()
¡×Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ¿¡ ´ëÇÑ InputStreamÀ» ¸®ÅÏ
¡×Ŭ¶óÀ̾ðÆ®´Â ÀÌ ½ºÆ®¸²À» »ç¿ëÇÏ¿© ¼¹ö·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¹Þ´Â´Ù.
|
Hit : 11710 Date : 2004/12/14 11:55
|