lecture Home > ASP.NET > Ç÷¯±×ÀÎÀÇ .NET ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö

.NET ¼ÒÄÏ ÄÄÆ÷³ÍÆ® °³¹ß°ú ASP¿¡¼­ »ç¿ëÇϱâ

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2004³â 05¿ù 11ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2004³â 05¿ù 12ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : pluginnz(ÃÖ À±±Ô)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : .NET ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö (5)

°­Á Àü Å¿ÀÀÇ Àâ´ã>

ÀÎ±â Æø¹ß~~ ¸¹Àº ºÐµéÀÌ °ü½ÉÀ» °¡Áö°í ±â´Ù¸®½Ã´ø~~ Ç÷¯±×ÀÎ(pluginn@naver.com) ´ÔÀÇ .NET ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö °­ÁÂ. ±× ´Ù¼¸¹øÂ° ½Ã°£ÀÔ´Ï´Ù. Àç¹ÌÀÖ°Ô º¸°í °è½Ã´Â ºÐÀº °Ý·Á ¸ÞÀÏ Çѹø ³¯·ÁÁÖ¼¼¿©~ ^^


°­Á ½ÃÀÛ >

¹ú½á 2004³âµµ 5¿ù¿¡ Á¢¾îµé°í, ¸îÀÏÀÌ Áö³µ½À´Ï´Ù. ¿ª½Ã ½Ã°£Àº »ó´çÈ÷ ºü¸£³×¿ä. °­Á¸¦ 3¿ùºÎÅÍ ÀÛ¼ºÇϱ⠽ÃÀÛÇߴµ¥ 2°³¿ùÀ̳ª Áö³µ´Ù´Ï Áö³ª°í ³ª¸é ºü¸£°í, ¾Æ½±°í ¹º°¡ ÇãÀüÇÑ°Ô ½Ã°£ ¾Æ´Ñ°¡ ½Í³×¿ä. ±×¸®°í ¸ÞÀÏ·Î °Ý·Á¸¦ ÇØÁֽЏî¸î ºÐ²² °¨»çµå¸³´Ï´Ù. ÈûÀ̳ª³×¿ä. ºÎÁ·ÇÏÁö¸¸ ÀоîÁּż­ ´Ù½ÃÇѹø °¨»çµå¸³´Ï´Ù.

Socket UDP ÇÁ·Î±×·¡¹Ö

Áö³­½Ã°£±îÁö Socket Ŭ·¡½º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »ç¿ë¹ý°ú ¼ÒÄÏ »ý¼ºÀ» ÇϱâÀ§ÇØ ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°¡ °®Ãç¾ßÇÒ ¸î °¡Áö ±âº»ÀûÀº ±¸Á¶¿¡ ´ëÇØ °øºÎÇØ º¸¾Ò½À´Ï´Ù. À̹ø½Ã°£¿¡´Â Áö³­½Ã°£ÀÇ Server¿Í Client ÇÁ·Î±×·¥µéÀ» UDP ÇÁ·Î±×·¥À¸·Î ¼öÁ¤ÇØ º¸°Ú½À´Ï´Ù. "ÀÛ¼º" ÀÌ ¾Æ´Ï¶ó "¼öÁ¤" À̶ó´Â ¸»¿¡ ´À³¦À» ¹ÞÀ¸½ÅºÐµéÀÌ ÀÖÀ»µí ½Í½À´Ï´Ù. ¿¹ ±×·¸½À´Ï´Ù. ±¸Á¶ÀûÀ¸·Î ¶È°°½À´Ï´Ù. ´ÜÁö TCP ¿Í UDP °¡ °¡Áö´Â °³³äÀÌ Á¶±Ý ´Ù¸£±â ¶§¹®¿¡ Åë½Å ¹æ¹ýÀÌ ´Ù¸¨´Ï´Ù. ±×·¸±â ¶§¹®¿¡ Áö³­ °­ÁÂÀÇ TCP ¼Ò½º¸¦ ÀÌÇØÇϼ̴ٸé UDP¸¦ ½±°Ô ÀÌÇØÇϽǼö ÀÖ½À´Ï´Ù. Á» ºÒÆíÇϽôõ¶óµµ 4°­ÁÂÀÇ ¼Ò½º¸¦ Âü°íÇØ Áֽñ⠹٠¶ø´Ï´Ù.

[¼­¹öÃø ¼Ò½º]

- ¼Ò½º»ý·« -

try
{
    //Server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    Server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
    Server.Bind(serverEndPoint);
    //Server.Listen(10);

    Console.WriteLine("-----------------------------------------------------");
    Console.WriteLine(" Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù........ ");
    Console.WriteLine("-----------------------------------------------------");

    //Client = Server.Accept();

Socket Ŭ·¡½ºÀÇ »ý¼ºÀÚ ÀÎÀÚµéÀÇ ±¸¼ºÀÌ UDP ·Î ¹Ù²î¾ú½À´Ï´Ù. ¼­¹ö·Î »ç¿ëµÈ EndPoint °´Ã¼¸¦ Bind ÇÏ¿´½À´Ï´Ù, UDP ´Â TCP¿Í °°ÀÌ ¿¬°áÇϰí, µ¥ÀÌÅ͸¦ °¡Á®¿À´Â ¿¬°á°úÁ¤(3Way-HandShaking)ÀÌ ÇÊ¿ä¾ø±â ¶§¹®¿¡, Á¢¼ÓÀÚµéÀ» BackLag¿¡ ½×¾ÆµÎ°í Çϳª¾¿ ¿¬°áÀ» ¼³Á¤ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ±×·¡¼­ Listen ¸Þ¼Òµå¸¦ »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ ¸»¾¸À» µå¸°´Ù¸é µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ¸é ±×¸¸ÀÎ °ÍÀÔ´Ï´Ù. ±×°ÍÀÌ Àß°¬´ÂÁö, ÆÐŶÀÌ ¿À·ù°¡ À־ ´Ù½Ã Àü¼ÛÀ» ¿äÃ»ÇØ¾ß ÇÏ´ÂÁö´Â, UDP´Â ´Ù¸¥ µ¥ÀÌÅÍ¿¡ ¹Ð·Á ´Ê°Ô ¼ö½Å µÇ´øÁö ¾Ë ¼ö ¾ø°í °ü½Éµµ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. 1°­Á¿¡¼­ ¸»¾¸µå·ÈµíÀÌ ¹æ¼ÛÆÄ¿Í ºñ½ÁÇÑ »óÅÂÀÔ´Ï´Ù. KBS(Ŭ¶óÀÌ¾ðÆ®°¡ µ¥ÀÌÅ͸¦ ¹ß¼ÛÇϹǷÎ..)¿¡¼­ Àü±¹¿¡ KBS ¹æ¼ÛÆÄ¸¦ »Ñ¸³´Ï´Ù. °¢ °¡Á¤ÁýÀº ¹æ¼ÛÆÄ¸¦ ¼ö½ÅÇϰÚÁö¸¸ Áö¹æÀ̳ª °¢, Áý¾È »çÁ¤¸¶´Ù ¼ö½ÅµÇ´Â Â÷À̰¡ ÀÖÀ»¼öµµ ÀÖ°í, ¾Æ¿¹ ¹æ¼ÛÆÄ°¡ ¸ø ¹Þ´Â ÁýÀÌ ÀÖÀ»°ÍÀÔ´Ï´Ù. KBS´Â ¹æ¼ÛÆÄ¸¦ º¸³»¸é ±×¸¸ÀÌÁö ¹æ¼ÛÆÄ·Î ¼ö½ÅÀÌ ÀߵǴÂÁö ¾ÈµÇ´ÂÁö¸¦ ´Ù½Ã ¼ö½ÅÇÏÁö ¾Ê´Â°Í°ú °°½À´Ï´Ù. Server.Accept(); ¿Í °°Àº ¿¬°á¼³Á¤ ¸Þ¼Òµåµµ ÀÌ¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù. ½±°Ô Á¤¸®¸¦ÇÏÁö¸é Server.Bind() ¸¸À¸·Î UDP ¿¬°á¼³Á¤ÀÌ ¸ðµÎ ³¡³ª°í , Send() ÀÚü·Î ¿¬°á°ú ¹ß¼ÛÀÌ µ¿½Ã¿¡ ÀÌ·ç¾î Áý´Ï´Ù. µ¥ÀÌÅ͸¦ º¸³»´Â ¼ø°£ ¿¬°áÇØ¼­ ¹ß¼ÛÇÏ°Ô µÇ´Â°ÍÀÔ´Ï´Ù.

//if(Server.Connected)
//{

    while(true)
    {
        Server.Receive(getByte,0,getByte.Length,SocketFlags.None);
        stringbyte = Encoding.UTF7.GetString(getByte);
        Console.WriteLine(Server.Connected);
        if (stringbyte != String.Empty)
        {
            int getValueLength = 0;

            getValueLength = byteArrayDefrag(getByte);
            stringbyte = Encoding.UTF7.GetString(getByte,0,getValueLength+1);

            Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ:{0} | ±æÀÌ:{1}",stringbyte,getValueLength+1);
            setByte = Encoding.UTF7.GetBytes(stringbyte);
            Server.Send(setByte,0,setByte.Length,SocketFlags.None);
        }
    }
//}

À§ÀÇ ¼Ò½º ¼öÁ¤À¸·Î ¸ðµç ¼öÁ¤ÀÌ ³¡³µ½À´Ï´Ù. Server.Connected ¿ª½Ã Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇß´ÂÁö ¿©ºÎ´Â UDP´Â Áß¿äÇÏÁö ¾Ê½À´Ï´Ù. UDP ¿¬°áÀ̶õ °³³äÀÌ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. Áö±ÝÂë È¥¶õÀÌ Á¶±Ý ¿À½Ã°Å³ª Çì±ò¸®½Ã´Â ºÐµéÀº ´Ù½Ã 1°­Á ³»¿ëÀ» º¹½ÀÇÏ½Ã°í º¸½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌÁ¦ Ŭ¶óÀÌ¾ðÆ® Ãø ¼Ò½º¸¦ º¸°Ú½À´Ï´Ù.

[Ŭ¶óÀÌ¾ðÆ® ¼Ò½º]

    //socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    socket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);

    Console.WriteLine("-----------------------------------------------------");
    Console.WriteLine(" ¼­¹ö·Î Á¢¼ÓÀ» ½ÃÀÛÇÕ´Ï´Ù. [¿£Å͸¦ ÀÔ·ÂÇϼ¼¿ä] ");
    Console.WriteLine("-----------------------------------------------------");
    Console.ReadLine();

    socket.Connect(serverEndPoint);

Ŭ¶óÀÌ¾ðÆ® ¼Ò½º´Â ÀÌ°Ô ³¡ÀÔ´Ï´Ù. ¼Ò½º¸¦ º¸½Ã¸é ¸¶Áö¸·ÁÙ ¼Ò½º¿¡ Á¶±Ý Àǹ®À» °¡Áú°ÍÀÔ´Ï´Ù.

socket.Connect(ServerEndPoint);

¿¬°áÀ̶õ°Ô ¼­¹ö¿¡ ¾ø¾ú´Âµ¥, Ŭ¶óÀÌ¾ðÆ®¿¡´Â ¿Ø ¿¬°á.?. À̰ÍÀº EndPoint(¼­¹öÃø¿¬°áÁ¡)¸¦ ¹ÙÀεå ÇϱâÀ§ÇÑ, ÇϳªÀÇ Connect ¸Þ¼­µåÀÏ »ÓÀÔ´Ï´Ù.Áï ¿¬°á¼³Á¤ÀÌ µÇ´Â°ÍÀÔ´Ï´Ù. ¿¬°á°ú Àü¼ÛÀÇ °³³äÀ» Æ÷ÇÔÇϰí Àִ°ÍÀº ¿ª½Ã, Server.Send() ¸Þ¼Òµå°¡ µÇ°Ú½À´Ï´Ù. ÀÚ Á¶±Ý È¥¶õÀÌ ¿À½Ç ¼ö ÀÖÀ»°ÍÀÔ´Ï´Ù. ÀÚ TCP ¿Í UDP °³³äÀ» Á¶±Ý ÀÌÇØÇϽŠºÐÀ̶ó¸é ½±°Ô ÀÌÇØ ÇÒ ¼ö ÀÖ´Â ¼Ò½ºÀÔ´Ï´Ù. ±âÁ¸¿¡ Á¦´ë·Î ÀÛµ¿µÇ´ø È­¸éÀ» Àá±ñ º¸¸é,

¿ìÃø Ŭ¶óÀÌ¾ðÆ®¿¡¼­ hi ¶ó°í ¹ß¼ÛµÈ°ÍÀÌ , ÁÂÃøÀÇ ¼­¹öÃøÀÌ ¼ö½ÅÇϸé È­¸é¿¡ Ãâ·ÂÇÏ°í ´Ù½Ã Å¬¶óÀÌ¾ðÆ® ÃøÀ¸·Î ¹ÞÀº µ¥ÀÌÅ͸¦ ¹ß¼ÛÇÏ°Ô µË´Ï´Ù. ±×·³ ¼öÁ¤µÈ UDP ¼ÒÄÏÀ¸·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥À» ½ÇÇàÇØº¸°Ú½À´Ï´Ù.

À§¿¡ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ¹ß¼ÛÇÑ µ¥ÀÌÅÍ "hi"¸¦ ¼­¹ö°¡ ¼ö½ÅÀ» Àß ÇÏ¿´´Âµ¥, ¼­¹ö°¡ ¼ö½ÅÇÑ µ¥ÀÌÅ͸¦ ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¹ß¼ÛÇÏ·Á´Ï Àú·¯ÇÑ ¿À·ù°¡ ¹ß»ýµÇ¾ú½À´Ï´Ù. TCP Åë½Å¿¡¼­´Â ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°£ÀÇ ¿¬°á°úÁ¤(3way HandShaking)¿¡¼­ Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°£ÀÇ ¼ÒÄÏ Á¤º¸°¡ ÀÌ¹Ì ±³È¯µË´Ï´Ù. ÀÌ °úÁ¤¿¡¼­ ¿¬°áÀÌ ³¡³ª¸é ¼­¹ö¼ÒÄÏÀÇ accept() ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®ÃøÀÇ ¼ÒÄÏÁ¤º¸¸¦ °¡Á®¿À°í, ±×°ÍÀ¸·Î ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°£ÀÇ ¼¼¼ÇÀÌ ¼º¸³µÇ¾î ¼­·Î°£ÀÇ Åë½ÅÀÌ ¿ëÀÌÇÏ°Ô µË´Ï´Ù. ÇÏÁö¸¸ UDP´Â ¿¬°áÀÌ ¾ø´Â ºñ¿¬°á(Connnectless)ÁöÇâ ÇÁ·ÎÅäÄÝÀ̱⠶§¹®¿¡ Àü¼ÛÇÒ »ó´ë¹æÀÇ IP¿Í Æ÷Æ®·Î ¶Ç ÇϳªÀÇ ¼ÒÄÏÀ» »ý¼ºÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¾Æ·¡ °£´ÜÇÏ°Ô ±×¸²À¸·Î Á¤¸®ÇØ º¸°Ú½À´Ï´Ù.

¿¬°áÁöÇâÇüÀÎ TCP ÀÇ °æ¿ì Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°£ÀÇ ¿¬°á¿¡ ´ëÇÑ ÀÎÁõºÎºÐÀÌ ³¡³­ÈÄ ¼¼¼ÇÀÌ ¼³Á¤µÇ°í ¼­·Î Send/Receive °¡ °¡´ÉÇÑ »óÅÂÀÔ´Ï´Ù.

ºñ¿¬°áÁöÇâÇüÀÎ UDP´Â ¿¬°á¼³Á¤ÀÌ ¾øÀ¸¹Ç·Î ¹Ù·Î Send ¸Þ¼Òµå·Î µ¥ÀÌÅ͸¦ ¹ß¼ÛÇÕ´Ï´Ù. TCP¿Í °°Àº ¿¬°á ¼³Á¤ÀÌ ¾øÀ¸¹Ç·Î ¾îµð¼­ µ¥ÀÌÅͰ¡ ¿Ô´ÂÁö ¾Ë ¼ö ¾ø½À´Ï´Ù. ÀÏºÎ ÇØÄ¿³ª ÄÄÇ»ÅÍ Ä§ÀÔÀÚµéÀÌ ÀÍ¸í¼ºÀ» °¡Áø UDP ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÑ ½Ãµµ°¡ ¸¹ÀÌ ÀÌ·ç¾î Áö°ïÇÕ´Ï´Ù. ±×·¡¼­ ±â°üÀ̳ª °ü°ø¼­ °°Àº ¹æÈ­º®À» °®Ãß°í ÀÖ´Â ½Ã½ºÅÛ¿¡¼­´Â, UDP ¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù°íµµ ÇÕ´Ï´Ù.

À§¿Í°°Àº °³³äÀ¸·Î ÁÂÃø¿¡¼­´Â Receive ¸¦ ±â´Ù¸®°í ÀÖÀ¸¹Ç·Î ¿ìÃøÄÄÇ»ÅÍ¿¡¼­ Send ÇÏ°Ô µÇ¸é, Send ¿Í Receive °¡ ÀÌ·ç¾î ÁöÁö¸¸, ¿ìÃø¿¡¼­ ÁÂÃøÀ¸·Î Send ÇÒ °æ¿ì ÁÂÃøÄÄÇ»ÅÍ(clinet ¸ðµâ)¿¡¼­´Â Á¢¼ÓÀ» ±â´Ù¸®´Â ºÎºÐÀº ¸¸µéÁö ¾Ê¾ÒÀ¸¹Ç·Î ÀϹæÀûÀÎ Àü¼Û¸¸ °¡´ÉÇÏ°Ô µÇ´Â°ÍÀÔ´Ï´Ù. ¾Æ·¡´Â ½Ö¹æÇâÀÌ °¡´ÉÇϵµ·Ï ¼öÁ¤Çغ» ±×¸²ÀÔ´Ï´Ù.

¼­·Î 2°³ÀÇ ¼ÒÄÏÀ» »ý¼ºÇÏ¿©, µ¥ÀÌÅ͸¦ º¸³¾¶§´Â 1¹ø¼ÒÄÏÀ¸·Î ¹ÞÀ»¶§´Â 2¹ø¼ÒÄÏÀ¸·Î ±¸¼ºÇÑ Çü½ÄÀÔ´Ï´Ù. ¹°·Ð Connect-less ÇÕ´Ï´Ù. ½Ö¹æÇâÀ¸·Î Åë½ÅÀÌ °¡´ÉÇϵµ·Ï ÄÚµùÇϵµ·Ï ¼öÁ¤Çغ¸°Ú½À´Ï´Ù. ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ °ü°è´Â ¼­·Î ¼­¹ö°í ¼­·Î Ŭ¶óÀÌ¾ðÆ®°¡ µÇ´Â°ÍÀÔ´Ï´Ù. ¼÷ÁöÇÏ½Ã°í ¼Ò½º¸¦ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

[¼­¹ö]

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ServerSideSocket
{
    class ServerClass
    {
        public static Socket Server , ServerYou , Client;
        
        public static byte[] getByte = new byte[1024];
        public static byte[] setByte = new byte[1024];
        
        public const int sPort = 5000;
        public const int sPortyou = 5001;
        
        [STAThread]    static void Main(string[] args)
        {
            string stringbyte = null
            IPAddress serverIP = IPAddress.Parse("127.0.0.1");
            IPAddress serverIPYou = IPAddress.Parse("127.0.0.1");

            IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);
            IPEndPoint serverEndPointYou = new IPEndPoint(serverIPYou,sPortyou);
            
            try
            {
                Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                                ProtocolType.Udp);

                ServerYou = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                                ProtocolType.Udp);

                
                Server.Bind(serverEndPoint);
                ServerYou.Connect(serverEndPointYou);

                Console.WriteLine("-----------------------------------------------------");
                Console.WriteLine(" Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù........ ");
                Console.WriteLine("-----------------------------------------------------");

                while(true)
                {
                    Server.Receive(getByte,0,getByte.Length,SocketFlags.None);
                    stringbyte = Encoding.UTF7.GetString(getByte);
                    Console.WriteLine(Server.Connected);
                    if (stringbyte != String.Empty)
                    {
                        int getValueLength = 0;

                        getValueLength = byteArrayDefrag(getByte);
                        stringbyte = Encoding.UTF7.GetString(getByte,0,getValueLength+1);

                        Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ:{0} | ±æÀÌ:{1}",
                                        stringbyte,getValueLength+1);
                        setByte = Encoding.UTF7.GetBytes(stringbyte);
                        ServerYou.Send(setByte,0,setByte.Length,SocketFlags.None);
                        Console.WriteLine("(((((¹ß¼ÛÇßÀ½-" +
                                        Encoding.UTF7.GetString(setByte) + ")))");
                    }
                }
            }

            catch(System.Net.Sockets.SocketException socketEx)
            {
                Console.WriteLine("[Error]:{0}",socketEx.Message);
            }
            catch(System.Exception commonEx)
            {
                Console.WriteLine("[Error]:{0}",commonEx.Message);
            }
            finally
            {
                Server.Close();
                ServerYou.Close();
            }
    }

        public static int byteArrayDefrag(byte[] sData)
        {
            int endLength = 0;
            for(int i=0; i < sdata.length ; i++)
            {
                if((byte)sData[i] != (byte)0)
                {
                    endLength =i;
                }
            }

            return endLength;
        }
    }
}

Áß¿äÇÑ °ÍÀº À§ÀÇ ±×¸²ÀÇ Åä´ë·Î ÀÛ¼ºµÈ ºÎºÐÀÔ´Ï´Ù. Áß¿äÇÑ ºÎºÐ¸¸ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

public const int sPort = 5000;
public const int sPortyou = 5001;

IPAddress serverIP = IPAddress.Parse("127.0.0.1");
IPAddress serverIPYou = IPAddress.Parse("127.0.0.1");

IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);
IPEndPoint serverEndPointYou= new IPEndPoint(serverIPYou,sPortyou);

Server = new Socket(AddressFamily.InterNetwork , SocketType.Dgram,ProtocolType.Udp);
ServerYou = new Socket(AddressFamily.InterNetwork , SocketType.Dgram , ProtocolType.Udp);

Server.Bind(serverEndPoint);
ServerYou.Connect(serverEndPointYou);

³ì»öÀ¸·Î Ç¥±âµÈ ºÎºÐµéÀÇ ¼Ò½ºÀÔ´Ï´Ù. À§ÀÇ ±×¸²Ã³·³ ¼Û/¼ö½ÅÇÒ¼ö ÀÖµµ·Ï 2°³ÀÇ ¼ÒÄÏÀ» ÁغñÇϰí ÁÙÄ£ ºÎºÐµéÀº ¼ö½Å¿ëÀ¸·Î ÀÌ¿ëµÉ ¼ÒÄÏÀÇ ¼Ó¼ºÀÌ µÇ°Ú½À´Ï´Ù. ÇöÀç PCÀÇ 127.0.0.1:5000 ÀÌ ¼ö½Å¿ë(¼­¹ö)À¸·Î ±â´Ù¸®°ÔµÉ ¼ÒÄÏÀ̰í 127,0.0.1:5001 ÀÌ ¹ß½Å¿ë(Ŭ¶óÀ̾ðÆ®)ÀÌ µÉ ¼ÒÄÏ ¼Ó¼ºÀÌ µÇ°Ú½À´Ï´Ù. ³ë¶õ»öºÎºÐÀÌ ½ÇÁ¦ ¸Þ¼Òµå¸¦ ó¸®ÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ¾Æ·¡¿Í °°½À´Ï´Ù. ¼ÒÄÏ °´Ã¼¸¦ ¼Ò½º¸¦ µû¶ó ã¾Æº¸¸é ½±°Ô ÀÌÇØ°¡ °¡½Ç °ÍÀÔ´Ï´Ù.

Server.Receive(getByte,0,getByte.Length,SocketFlags.None); ServerYou.Send(setByte,0,setByte.Length,SocketFlags.None);

[Ŭ¶óÀ̾ðÆ®]

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace ClientSideSocket
{
    class ClientClass
    {
        public static Socket socket,socketme;
        public static byte[] getbyte = new byte[1024];
        public static byte[] setbyte = new byte[1024];

        public const int sPort = 5000;            // ¹ß½Å¿ë
        public const int sPortMe = 5001;        // ¼ö½Å¿ë

        [STAThread] static void Main(string[] args)
        {
            string sendstring = null

            int byteEndLength = 0;

            IPAddress serverIP = IPAddress.Parse("127.0.0.1");
            IPAddress ServerIPMe = IPAddress.Parse("127.0.0.1");

            IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);
            IPEndPoint serverEndPointMe = new IPEndPoint(ServerIPMe,sPortMe);

            socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                            ProtocolType.Udp);
            socketme = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                            ProtocolType.Udp);

            Console.WriteLine("-----------------------------------------------------");
            Console.WriteLine(" ¼­¹ö·Î Á¢¼ÓÀ» ½ÃÀÛÇÕ´Ï´Ù. [¿£Å͸¦ ÀÔ·ÂÇϼ¼¿ä] ");
            Console.WriteLine("-----------------------------------------------------");
            Console.ReadLine();

            socket.Connect(serverEndPoint);
            socketme.Bind(serverEndPointMe);

            if (socket.Connected)
            {
                Console.WriteLine(">> Á¤»óÀûÀ¸·Î ¿¬°áµÇ¾ú½À´Ï´Ù(Àü¼ÛÇÑ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇØÁÖ¼¼¿ä)");
            }

            while(true)
            {
                         Console.Write(">>");
                sendstring = Console.ReadLine();
                sendMessage(sendstring);
            }
        }

        public static int byteArrayDefrag(byte[] sData)
        {
            int endLength = 0;
            for(int i=0; i < sdata.length ; i++)
            {
                if((byte)sData[i] != (byte)0)
                {
                    endLength =i;
                }
            }

            return endLength;
        }

        public static void sendMessage(string sendmsg)
        {
            string getstring = null

            if(sendmsg != string.Empty)
            {
                int getValueLength = 0;

                setbyte = Encoding.UTF7.GetBytes(sendmsg);
                socket.Send(setbyte,0,setbyte.Length,SocketFlags.None);

                socketme.Receive(getbyte,0,getbyte.Length,SocketFlags.None);

                getValueLength = byteArrayDefrag(getbyte);
                getstring = Encoding.UTF7.GetString(getbyte,0,getValueLength+1);

                Console.WriteLine("(¼ö½ÅµÈ µ¥ÀÌÅÍ :{0} | ±æÀÌ{1})" , getstring ,
                              getValueLength+1);
            }
            else
            {
                Console.WriteLine("¼ö½ÅµÈ µ¥ÀÌÅÍ ¾øÀ½");
            }
        }
    }
}

Ŭ¶óÀÌ¾ðÆ® Ãø ¼Ò½ºµµ ¼­¹ö¿Í »ó´çÈ÷ ºñ½ÁÇÕ´Ï´Ù. Á¶±Ý ´Ù¸¥Á¡ÀÌ ÀÖ´Ù¸é ¹ß¼Û ºÎºÐÀ» ¸Þ¼Òµå·Î »©¼­ ÀÛ¼ºÇØ º¸¾Ò½À´Ï´Ù. ¼­¹öÃø ¼Ò½º¿Í Console.ReadLine À¸·Î ¹Þ¾Æ sendMessage() ·Î ó¸®ÇÏ´Â ºÎºÐÀ» »©°í´Â °°½À´Ï´Ù. ÃÖÁ¾ ½ÇÇàµÈ È­¸éÀÔ´Ï´Ù.


Thread(¾²·¹µå)

À©µµ¿ìÀÇ TaskManager ¸¦ ¶ç¿öº¸½Ã¸é, À©µµ¿ì ¾È¿¡¼­ ´ÙÁßÀ¸·Î µ¹¾Æ°¡´Â Process µéÀ» º¸½Ç ¼ö ÀÖ½À ´Ï´Ù. ÀÌ·¸°Ô µ¿½Ã¿¡ ¾î·¯°³ÀÇ Process µéÀ» ó¸®Çϴ°ÍÀ» ¸ÖƼ ÇÁ·Î¼¼½Ì À̶ó°í ÇÑ´Ù¸é, ÇÁ·Î¼¼½º Çϳª¾È¿¡¼­ ¶Ç ¿©·¯°³ÀÇ ÀÛ¾÷µéÀÌ ÀÌ·ç¾î Áú ¼ö ÀÖ½À´Ï´Ù. ±×°ÍÀ» ¸ÖƼ ¾²·¹µå ¶ó°í ÇÕ´Ï´Ù. ASP¿¡¼­ .Net À¸·ÎÀÇ ÇÑ´Ü°è ¾÷±×·¹À̵åµÈ °³¹ßÀÚ¶ó¸é Thread 󸮸¦ ¹Ýµå½Ã ÀÌÇØ¾ßÇÒ °ÍÀÔ´Ï´Ù. ¼ÒÄÏ¿¡ ´ëÇÑ °­Á À̹ǷΠ¾²·¹µå¿¡ ´ëÇÑ ³»¿ëÀº °£´ÜÇÏ°Ô ¾Ë¾Æº¸°í ³Ñ¾î°¡µµ·Ï ÇϰڽÀ´Ï´Ù.

ÇϳªÀÇ ÇÁ·Î¼¼½º¾È¿¡¼­ ¿©·¯°³ÀÇ ¾²·¹µå°¡ µ¿ÀÛÇÏ´Â °æ¿ì´Â °ÔÀÓÀ» ¿¹·Îµå´Â°Ô °¡Àå ½¬¿ï²¨°°½À´Ï´Ù. ÀϹÝÀûÀ¸·Î °£´ÜÇÏ°Ô ÀÛ¼ºµÈ ÇÁ·Î±×·¥¿¡¼­´Â ÇϳªÀÇ »ç°Ç¸¸À» ´Ù·ç°Ô µË´Ï´Ù. ÇÏÁö¸¸ °ÔÀÓ °°Àº°æ¿ì´Â ¹Ì»çÀÏÀ» ½î¸é¼­ ¹æÇâ۸¦ Á¶ÀÛÇϰԵ˴ϴÙ.(¹°·Ð ´õ º¹ÀâÇÕ´Ï´Ù¸¸),

¹Ì»çÀÏŰÀº Ctrl ۸¦ ´©·ç´Â ¼ø°£ Àú·¯ÇÑ ¸Þ¼Òµå¸¦ °è¼Ó È£ÃâÇÏ°Ô µÉ²¯À̰í,

private int AttackMissile(int arms)
{
    // ¹«±â¸¦ ¹ß»çÇÑ´Ù.
}

¹æÇâ۸¦ ´©¸£´Â ¼ø°£¿¡´Â..

private int MoveAirPlain(KeyCode)
{
    switch()
    {
        case    // ¿ìÃø
        case    // ÁÂÃø

    }
}

ÀÌ·¯ÇÑ ¸Þ¼Òµå°¡ ¼ö¾øÀÌ È£Ãâ µÉ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ¹®Á¦´Â ¹Ì»çÀÏÀ» ½î¸é¼­ Ç×»ó ¹æÇâ۸¦ ¿òÁ÷À̴µ¥ ÀÖ½À´Ï´Ù. Çѹø¸¸ È£ÃâµÇ´Â°ÍÀÌ ¾Æ´Ï¶ó °è¼ÓÀÔ´Ï´Ù. ¹°·Ð »ç¿ëÀÚ°¡ ¹öưÀ» ´©¸£´Â ¼Óµµº¸´Ù ³»ºÎ¿¡¼­ ÄÄÇ»ÅͰ¡ ¹æÇâŰ ¸Þ¼Òµå¸¦ ó¸®ÇÏ°í ¹Ì»çÀÏÀ» ó¸®ÇÏ´Â ¼Óµµ°¡ ºü¸£Áö¾Ê³Ä°í ÀÌÀ¯¸¦ ´Ù½Å´Ù¸é ÇÒ¸»À» ¾ø½À´Ï´Ù¸¸, äÆÃ°ú À̳ª ¿©·¯»ç¿ëÀÚ°¡ µ¿½Ã¿¡ Á¢¼ÓÇØ¼­ ´ÙÁßÀ¸·Î ¼ÒÄÏÀ» ó¸®Çϱâ À§Çؼ­´Â ¹Ýµå½Ã ¾²·¹µå°¡ ÇÊ¿äÇÏ¿©, äÆÃ»Ó¸¸¾Æ´Ï¶ó ´ÙÁß»ç¿ëÀÚ Ã³¸®¿¡¼­´Â 1 User ´ç 1 Thread ·Î ó¸®ÇÏ¿© ÇÁ·Î±×·¡¹Ö ÇØ¾ßÇÕ´Ï´Ù. ¾²·¹µå¸¦ ÀÌ¿ëÇÑ ¼ÒÄÏ Åë½ÅÀº 7°­Á Á¤µµ¿¡¼­ Áö±Ý±îÁö ¹è¿î ³»¿ëÀ¸·Î ASP ¿Í .Net ¼ÒÄÏ °£ÀÇ Åë½ÅÀ» À§ÇØ ÀÛÀº ÇÁ·ÎÁ§Æ®¸¦ ÇÒ ¶§ ÀÚ¼¼È÷ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

À̹ø½Ã°£¿¡ °í¼öÁØÀÇ TCP ¼ÒÄÏ °´Ã¼¸¦ ¾Ë¾Æº¸·Á°í Çߴµ¥ Á» ±æ¾îÁ®¼­ ´ÙÀ½½Ã°£¿¡ °í¼öÁØ TCP Ŭ·¡½º¸¦ ¾Ë¾Æº¸°í, °ø¿ë¾î¼Àºí¸®¿Í »ç¼³ ¾î¼Àºí¸®¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

³¡±îÁö ÀоîÁּż­ °¨»çÇÕ´Ï´Ù.

 

Back