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

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

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2004³â 04¿ù 18ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2004³â 04¿ù 26ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

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

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

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

Ç÷¯±×ÀÎ(pluginn@naver.com) ´ÔÀÇ .NET ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö °­ÁÂ, ±× ³× ¹øÂ° ½Ã°£ÀÔ´Ï´Ù.


°­Á ½ÃÀÛ >

4¹øÂ° °­Á ½Ã°£ÀÔ´Ï´Ù. À̹ø½Ã°£¿¡´Â Socket(Àú¼öÁØ) Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥À» ¿Ï¼ºÇغ¸°í ÀÌÇØÇϴµ¥ ÁßÁ¡À» µÎ°Ú½À´Ï´Ù. Áö³­ ½Ã°£¿¡ ½ÉÇÃÇÏ°Ô ÄÜ¼Ö ¾îÇø®ÄÉÀ̼ÇÀ¸·Î ¸¸µé¾î º¸¾Ò´Âµ¥ ¹«Ã¥ÀÓÇÏ°Ô ¼Ò½º¸¸ º¸¿©µå¸®°í °­Á¸¦ Á¢¾î ¹ö·È¾ú³×¿ä. ÇÏÁö¸¸ ±× ¼Ò½º¸¦ ÄÚµùÇØº¸°í ¸¹Àº ±Ã±ÝÁõÀ» °¡Áö¼Ì°Å³ª, ÃÖ¼ÒÇÑ ÀÌ·¯ÇÑ ºÎºÐµéÀº "¿Ö?" ¶ó°í Àǹ®À» °®À¸¼Ç ºÐµéÀº ÇÑ ´Ü°è ¾÷±×·¹ÀÌµå µÇ´Â ½Ã°£ÀÌ µÉ²®´Ï´Ù. ¹°·Ð Áö±Ý±îÁö °­Á¸¦ Àоî¿À½ÅºÐµéµµ ÇÑ ´Ü°è ¾÷±×·¹ÀÌµå µÉ²®´Ï´Ù. ^^

¼­¹ö & Ŭ¶óÀ̾ðÆ®

¿¹ÀüÀÇ Host ¿Í Terminal ȯ°æ¿¡¼­ ÇöÀçÀÇ Server ¿Í Client ȯ°æÀ» º¸¸é ±× Â÷À̸¦ È®¿¬È÷ ´À³¥¼ö ÀÖ½À´Ï´Ù. Áß¾Ó ÁýÁß½ÄÀ̾ú´ø Host ½ÃÀý¿¡´Â ÀϹæÀûÀÎ Response/Request ¿´´Ù¸é Server & Client ȯ°æÀº interactive ÇÑ Response/Request ¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹ÀüÀÇ Áß¾ÓÁýÁᫎ host ¹æ½ÄÀº µ¥ÀÌÅÍ¿Í Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ¼­¹ö¿¡ ¸ðµÎ ¿Ã·Á¼­ Ŭ¶óÀÌ¾ðÆ®¿¡¼­´Â (À©µµ¿ì Å͹̳Îó·³) ¼­¹ö¿¡ Á¢¼ÓÇØ¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇϰí, ¶Ç µ¥ÀÌÅ͸¦ °¡Á®¿À´Â ¼­¹ö¿¡ ÁýÁßÀûÀÎ ¹Ý¸é ,ÇöÀçÀÇ Server & Client ȯ°æÀº ¶È¶ÈÇÑ Client ´öºÐ¿¡ Client ¿Í Server ÇÒ ÀÏÀÌ ±¸ºÐµÇ°í(¼­¹ö½ºÅ©¸³,Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³ À¸·Î ±¸ºÐµÇµíÀÌ) Client °¡ ¼­¹ö¿¡°Ô Request Çϰí Server ´Â Client¿¡¼­ Response µÇ´Â Á» ´õ Áö´ÉÀûÀÌ°í ¼­¹ö¿¡ Load ¸¦ ´ú¾îÁÖ´Â Áøº¸ÀûÀÎ ÇüÅ·Π¹ßÀüÇØ ¿Ô½À´Ï´Ù.

°á±¹ ÇöÀç ¼ÒÄÏ ÇÁ·Î±×·¥µµ ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Response Çϰí Request ÇÒ ¼ö ÀÖ´Â Åë·Î¸¦ Á¦°øÇϰí Ŭ¶óÀÌ¾ðÆ® ºÎºÐ ¼ÒÄÏÀº Ŭ¶óÀÌ¾ðÆ® ºÎºÐÀ» °í·ÁÇÏ¿© ¿¹¿Ü󸮳ª ¿À·ù ¹ß»ý½Ã »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ó¸®, ¼­¹öÃø ¿¡´Â ¼­¹öÃø ¸®¼Ò½º °ü¸®¸¦ À§ÇÑ È¿À²ÀûÀÎ ÄÚµù ¹× ´ÙÁß Á¢¼ÓÀÚ¸¦ À§ÇÑ ºñµ¿±â(¾²·¹µå)ó¸®, ·Î±×ó¸® µîµîÀ¸·Î °³¹ßÇÏ¿© Á» ´õ Áøº¸ÀûÀ¸·Î Åë½ÅÇÒ ¼ö Àִ ȯ°æÀ» Á¦°øÇϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù.

3°­À» ÅëÇÏ¿© ±âº»ÀûÀÎ ¼ÒÄÏ Åë½Å¿¡ ´ëÇØ ¹è¿ü½À´Ï´Ù(¹°·Ð 10% µµ ¾ÈµÇ´Â ³»¿ëÀÌÁö¸¸ À̰ÍÀº ³ª¸ÓÁö 90%¸¦ ¿òÁ÷À̴µ¥ ÇØ´çµÇ´Â Áß¿äÇÑ ³»¿ëÀÔ´Ï´Ù.).ÀÚ.. Áö±Ý±îÁö °­Á¸¦ ÅëÇØ ÀÌÇØÇÏÁö ¸øÇß´ø ºÎºÐÀÌ ÀÖ´Ù¸é À̹ø°­Á¿¡ ÇØ°áÇϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. ¹°·Ð À̹ø°­Á¿¡¼­ ´Ù ÇØ°áÇϱ⿡´Â ºÎÁ· ÇÕ´Ï´Ù ´ÜÁö, À̹ø°­Á¸¦ ÅëÇØ¼­ 1,2,3 °­Á¸¦ ´Ù½Ã ÀоúÀ»¶§ "¾Æ~" Çϰí ÀÌÇØ ÇÏ´Â °è±â°¡ µÇ¾ß ÇÑ´Ù´Â ¸»ÀÔ´Ï´Ù.

À§ÀÇ ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ °³³äÀ» °¡Áö°í ¼­¹ö´Â ºÎºÐÀº ´õ¿í ¼­¹ö´ä°Ô Ŭ¶óÀÌ¾ðÆ®´Â Å¬¶óÀÌ¾ðÆ® ´ä°Ô ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸µµ·Ï ÇϰڽÀ´Ï´Ù.

¼­¹öÃø ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö

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

namespace ServerSideSocket
{
    class ServerClass
    {
        public static Socket Server , Client;
        
        public static byte[] getByte = new byte[1024];
        public static byte[] setByte = new byte[1024];
        
        public const int sPort = 5000;
        
        [STAThread]
        static void Main(string[] args)
        {
            string stringbyte = null
            IPAddress serverIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);
            
            Server= new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            Server.Bind(serverEndPoint);
            Server.Listen(10);

            Console.WriteLine("-----------------------------------------------------");
            Console.WriteLine(" Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸³´Ï´Ù........ ");
            Console.WriteLine("-----------------------------------------------------");
                                    
            Client = Server.Accept();
    
            if(Client.Connected)
            {
                while(true)
                {
                    Client.Receive(getByte,0,getByte.Length,SocketFlags.None);
                    stringbyte = Encoding.UTF7.GetString(getByte);
                        if (stringbyte != String.Empty)
                    {
                        Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ:{0} | ±æÀÌ:{1}",stringbyte,stringbyte.Length);
                        setByte = Encoding.UTF7.GetBytes(stringbyte);
                        
                        Client.Send(setByte,0,setByte.Length,SocketFlags.None);
                    }
                }
            }
        }
    }
}

ÀÏ´Ü ¼­¹öÃø ¼Ò½º¸¦ ºÐ¼®ÈÄ Å¬¶óÀ̾ðÆ®ÃøÀÇ ¼Ò½º¸¦ ÀÛ¼ºÇÏ°í ±× ´ÙÀ½ ¼Ò½º¸¦ º¸°­ÇØ ³ª°¡°Ú½À´Ï´Ù. ÀÚ~~ Àú¹ø¼Ò½º¿Í ½ÃÀÛÀº ºñ½ÁÇÕ´Ï´Ù. ±×¸® ¾î·ÆÁö´Â ¾Ê½À´Ï´Ù.

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

ÀÚ~~ using Áö½Ã¾î¸¦ ÅëÇØ Àü ½Ã°£¿¡ ¹è¿ü´ø °¢Á¾ ³×ÀÓ½ºÆäÀ̽ºµéÀ» ¸ðµÎ ¼±¾ðÇÕ´Ï´Ù. °£´ÜÇÏ°Ô »ìÆìº¸¸é System.Net Ŭ·¡½º¿¡´Â ¼ÒÄÏÀÌ ÇÊ¿ä·Î ÇÏ´Â ¿¬°á Á¾Á¡ »ý¼ºÀ» À§ÇÑ IPAddress, IPEndPoint , Dns Ŭ·¡½º µîÀÌ Æ÷ÇԵǾî ÀÖ°í , System.Net.Sockets Ŭ·¡½º¿¡´Â ¿ì¸®°¡ »ý¼ºÇÒ ¼ÒÄÏ Å¬·¡½º°¡ Æ÷ÇԵǾîÁ® ÀÖ½À´Ï´Ù.

System.Text´Â System.Text.Encoding Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ ¼±¾ðÇߴµ¥, °£´ÜÈ÷ ¼³¸íÀ» µå¸®ÀÚ¸é .Net ¿¡¼­ÀÇ ¼ÒÄÏÅë½ÅÀº Byte ´ÜÀ§·Î Åë½ÅÀ» ÇÑ´Ù°í ¸»¾¸ µå·È½À´Ï´Ù. ÇÏÁö¸¸ Ưº°ÇÑ °æ¿ì°¡ ¾Æ´Ï°í¼­´Â ÀϹÝÀûÀ¸·Î Text ¿¡ ´ëÇÑ Ã³¸®´Â String À¸·Î ÇϰԵ˴ϴÙ. Console.ReadLine(); À̳ª À©Æû,À¥Æû°ú °°Àº ¾îÇø®ÄÉÀ̼ǿ¡¼­ÀÇ ÀÔ·Â ÄÁÆ®·Ñ¿¡¼­ ÀÇ Value µéµµ ´ëºÎºÐ String ÀϰÍÀÔ´Ï´Ù.

Byte ´ÜÀ§´Â ±×¸¸Å­ ´Ù·ç±â°¡ ºÒÆíÇϰí È¿À²¼ºÀÌ ¶³¾îÁö±â ¶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀúÈñ´Â byte Åë½ÅÀ» ÇØ¾ßÇϱ⠶§¹®¿¡ System.Text.Encoding Ŭ·¡½º¸¦ »ç¿ëÇÏ¿©, string ´ÜÀ§ÀÇ ¹®ÀÚ¿­À» Byte ´ÜÀ§·Î ½±°Ô º¯È¯Çϰí Byte ´ÜÀ§ÀÇ ¹è¿­À» String À¸·Î ½±°Ô º¯È¯ ÇÏ°Ô Çϱâ À§Çؼ­ Text ³×ÀÓ½ºÆäÀ̽º¸¦ Æ÷ÇÔ Çß½À´Ï´Ù

(Byte <-> String , String <-> Byte º¯È¯½Ã µ¥ÀÌÅÍ Æ÷¸Ë±îÁö ÁöÁ¤ÇØ ÁÙ ¼ö Àֱ⠶§¹®¿¡ Çѱ۰ú °°Àº 2byte ¹®ÀÚ Àü¼Û½Ã Æ÷¸Ëº¯È¯µµ ÇØ ÁÙ ¼ö ÀÖ½À´Ï´Ù.)

namespace ServerSideSocket
class ServerClass

ÀÚ~~ ¼­¹öÀÇ ³×ÀÓ½ºÆäÀ̽º´Â ServerSideSocket À¸·Î ÀÓÀ¸·Î Á¦°¡ ÁöÁ¤Çß½À´Ï´Ù. Class µµ ServerClass ·Î ÀÓÀ¸·Î ÁöÁ¤Çß½À´Ï´Ù.

class ServerClass
{
    public static Socket Server , Client;
    public static byte[] getByte = new byte[1024];
    public static byte[] setByte = new byte[1024];
    public const int sPort = 5000;

À̹ø¿¡´Â ¿ÜºÎ·Î ¼±¾ðµÈ °¢Á¾ º¯¼ö µéÀÔ´Ï´Ù. Ŭ·¡½º ³»ºÎ¿¡ ¼±¾ðÇØ¼­ Main ÇÔ¼ö¿¡¼­ »ç¿ë °¡´ÉÇϵµ·Ï Á¤ÀûÀ¸·Î ¼±¾ðÇÏ¿´½À´Ï´Ù. ÇÏÁö¸¸ Áö±Ý°ú °°Àº ÇÁ·Î±×·¥¿¡¼­´Â Main ÇÔ¼ö ³»ºÎ¿¡ Á¤ÀÇÇÏ¿© »ç¿ëÇÏ¿©µµ ¹«¹æÇÕ´Ï´Ù. Ŭ·¡½º¸¦ ÀνºÅϽº·Î »ý¼ºÇؼ­ »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀ̱⠶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ Àú´Â ±¸Áö Ŭ·¡½º º¯¼öµé·Î ¼±¾ðÇÏ¿© Main ¸Þ¼Òµå¿¡¼­ »ç¿ëÇØºÃ½À´Ï´Ù.

Server ¼ÒÄÏ °´Ã¼´Â ¼­¹öÃøÀÇ IPEndPoint ·Î bind µÅ¼­ Accept µÇ¾î Ŭ¶óÀÌ¾ðÆ®¸¦ ±â´Ù¸®°Ô µÉ ¼­¹öÃø ¼ÒÄÏ °´Ã¼ À̰í, Client °´Ã¼´Â Server.Accept() ¸Þ¼Òµå·ÎºÎÅÍ ¸®ÅϵǴ Ŭ¸®¾ðÆ® ÃøÀÇ ¼ÒÄÏ °´Ã¼¸¦ ¹Þ±â À§ÇØ ¼±¾ðÇÑ ¼ÒÄÏ °´Ã¼ÀÔ´Ï´Ù. getByte ¿Í setByte ´Â º¯¼ö¸í¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ µ¥ÀÌÅ͸¦ ¹Þ°í, º¸³»°í ÇÒ º¯¼ö(¹öÆÛ)°¡ µÇ°Ú½À´Ï´Ù. .Net ¿¡¼­ÀÇ ¼ÒÄÏÅë½ÅÀº ¹ÙÀÌÆ® À̱⠶§¹®¿¡ byte Çü À¸·Î ¼±¾ð µÇ¾ú°í, µ¥ÀÌÅͰ¡ ±ÛÀÚ ÇÑÀÚ°¡ ¾Æ´Ï¶ó ¿©·¯ ÀÚµµ °¡´ÉÇϵµ·Ï ¹è¿­·Î ¼±¾ðÇÏ¿´½À´Ï´Ù.

¼­¹ö¿¡¼­ Ŭ¶óÀÌ¾ðÆ®¸¦ ±â´Ù¸®°ÔµÉ Æ÷Æ®´Â 5000 ¹øÀ¸·Î ÀÓÀ¸·Î ÁöÁ¤Çß½À´Ï´Ù. sPort ¿¡ static À» ºÙÀÌÁö ¾ÊÀº ÀÌÀ¯´Â const º¯¼ö ÀÚü°¡ Á¤ÀûÀ̱⠶§¹®ÀÔ´Ï´Ù. ´ÙÀ½ ¼Ò½º¸¦ º¸°Ú½À´Ï´Ù.

[STAThread]
static void Main(string[] args)
{
    string stringbyte = null
    IPAddress serverIP = IPAddress.Parse("127.0.0.1");
    IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);

    Server= new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    Server.Bind(serverEndPoint);
    Server.Listen(10);

stringbyte º¯¼ö¸¦ ¾Æ·¡ ¼Ò½º¿¡¼­ ¾²ÀÏ ¼ö½ÅµÈ byte ¹è¿­ÀÇ º¯¼öÀÇ µ¥ÀÌÅ͸¦ string ÇüÅ·Πº¯È¯ÇÏ¿© ÀúÀåÇÒ º¯¼ö°¡ µÇ°Ú½À´Ï´Ù. IPAddress ¿Í IPEndPoint Ŭ·¡½º·Î Á¤ÀÇµÈ °´Ã¼º¯¼öÀÇ °æ¿ì 3°­¿¡¼­ ¾Ë¾ÆºÃµíÀÌ Socket Ŭ·¡½º°¡ bind µÉ EndPoint ¸¦ »ý¼ºÇϱâ À§ÇØ, °¢°¢ ¼­¹öÀÇ IP´Â ÇöÀç ·ÎÄà IP ·Î½á LoopBack ÁÖ¼Ò¸¦ ÀÌ¿ëÇÏ¿´½À´Ï´Ù. port ´Â const·Î ¼±¾ðÇÑ º¯¼ö¸¦ ÀÌ¿ë ÇÏ¿´½À´Ï´Ù.

¼ÒÄÏÀÇ ¿­°ÅÇüÀ¸·Î ¼±¾ðµÈ ¼Ó¼ºµéÀ» °¡¸¸ÀÌ »ìÆìº¸¸é, TCP ·Î Åë½ÅÇϱâÀ§ÇÑ ¼Ó¼ºÀ̶ó´Â°ÍÀ» ½±°Ô ¾Ë¾Æ º¸½Ç ¼ö ÀÖÀ» ²®´Ï´Ù. Server.Listen(10) ´Â ¼ÒÄÏÀÇ BackLog ¸¦ 10°³¸¦ ÁöÁ¤ Çß½À´Ï´Ù Ŭ¶óÀ̾ðÆ®ÀÇ µ¿½Ã Á¢¼ÓÀÌ ÀÖÀ» °æ¿ì Queue ¿¡ 10°³±îÁö ÀúÀå Çϰڴٴ ¶æÀÔ´Ï´Ù.

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

ÀÚ~~ Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼Ó °¡´ÉÇϵµ·Ï Áغñ¸¦ ¸ðµÎ ³¡³Â½À´Ï´Ù. ÀÌÁ¦ Accept ¸Þ¼Òµå¸¦ È£ÃâÇϱâ Àü¿¡ Text¸¦ Ãâ·ÂÇÏ¿© ÁøÇà »óŸ¦ ¾Ëµµ·Ï ÇØ ³õ¾Ò½À´Ï´Ù. Áö±Ý±îÁö ÀÌ»óÀÌ ¾ø´Ù¸é ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾Ê°í, À§ÀÇ ÅØ½ºÆ®°¡ Ãâ·ÂµÉ°ÍÀÔ´Ï´Ù.

Accept() ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â ¼ø°£ ½º·¹µå°¡ ¸ØÃã´Ï´Ù. ±×·¯¹Ç·Î Accept() ¸Þ¼Òµå¸¦ È£Ãâ Çϱâ Àü¿¡ text ¸¦ ¸ÕÀú Ãâ·ÂÇÏ¿´½À´Ï´Ù.

    if(Client.Connected)
    {
        while(true)
        {
            Client.Receive(getByte,0,getByte.Length,SocketFlags.None);
            stringbyte = Encoding.UTF7.GetString(getByte);

            if (stringbyte != String.Empty)
            {
                Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ:{0} | ±æÀÌ:{1}",stringbyte,stringbyte.Length);
                Client.Send(setByte,0,setByte.Length,SocketFlags.None);
            }
        }

ÀÌ ºÎºÐÀÌ ¾à°£ Áß¿äÇÕ´Ï´Ù. ¿Ö ¹«ÇÑ ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ¼­¹ö´Â Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ ¹ß½ÅµÈ µ¥ÀÌÅ͸¦ ¾ðÁ¦ ¼ö½ÅÇØ¾ßÇÒÁö ¾Ë ¼ö ¾ø½À´Ï´Ù. ¹Ý´ë·Î Ŭ¶óÀÌ¾ðÆ®´Â µ¥ÀÌÅ͸¦ ÀÔ·ÂÇϰí [Enter] ¸¦ Ä¡´Â ¼ø°£ ¹ß¼ÛµÇ°Ô ÇÏ¸é µÇ±â ¶§¹®¿¡ ¹ß¼ÛµÉ À̺¥Æ® ½Ã°£À» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×·¡¼­ ¹«ÇÑ Loop ¸¦ µ¹·Á Ç×»ó Receive ÇØ¾ß ÇÕ´Ï´Ù. ±×·¡¼­ ¼­¹öÀÇ ºÎÇϰ¡ Å«ÆíÀÔ´Ï´Ù.¼­¹ö¿¡ 100¸íÀÇ »ç¿ëÀÚ°¡ Á¢¼ÓÇß´Ù¸é 100°³ÀÇ ¼ÒÄÏ °´Ã¼°¡ °¢°¢ÀÇ Å¬¶óÀ̾ðÆ®ÀÇ ¼ÒÄÏÀ» ¹«ÇÑ·çÇÁ¸¦ µ¹¸ç °Ë»çÇÏ°Ô µË´Ï´Ù.±×·¡¼­ ¼­¹öÀÇ ºÎÇϰ¡ Å©°ÔµË´Ï´Ù.

À§ÀÇ ¼³¸íÀ» ÂüÁ¶·Î ¼Ò½º¸¦ ¼³¸íÇÏÀÚ¸é ÀÌ·± ½Ã³ª¸®¿À°¡ µË´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ µ¥ÀÌÅͰ¡ ¾ðÁ¦ ¿ÃÁö ¸ð¸£´Â ¼­¹ö´Â ¹«ÇÑ Loop ¸¦ µ¹¸é¼­ Accept() ·Î ¾òÀº Ŭ¶óÀÌ¾ðÆ® Ãø ¼ÒÄÏÀ» Ç×»ó °Ë»çÇÏ¿© µ¥ÀÌÅÍ À¯¹«¸¦ È®ÀÎÇÕ´Ï´Ù. ¸¸¾à µ¥ÀÌÅͰ¡ ¼ö½ÅµÇ¸é(Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ ¼ÒÄÏÀ¸·Î µ¥ÀÌÅ͸¦ ¹ß¼ÛÇϸé) getByte ¹è¿­¿¡ ÀúÀåÇÑÈÄ stringbyte ·Î byte ¹è¿­ÀÇ ¹®ÀÚµéÀ» ¹®ÀÚ¿­·Î ¹Ù²ÛÈÄ String.Empty ·Î ¼ö½ÅµÈ µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö ¾ø´ÂÁö °Ë»çÇÏ°Ô µË´Ï´Ù. ¼ö½ÅµÈ µ¥ÀÌÅͰ¡ ÀÖ´Ù¸é È­¸é¿¡ Ãâ·ÂÇϰí, ¼ö½ÅµÈ µ¥ÀÌÅ͸¦ ¹ß¼ÛÇÑ Å¬¶óÀÌ¾ðÆ® ÃøÀ¸·Î Àç ¹ß¼ÛÇÏ°Ô µË´Ï´Ù.

Client.Receive(getByte,0,getByte.Length,SocketFlags.None);

Recevie ³ª Send ¸Þ¼ÒµåÀÇ °æ¿ì °°Àº ½Ã±×³ÊÃĸ¦ °°°ÔµÇ´Âµ¥, Á» ÀÚ¼¼ÇÏ°Ô »ìÆìº¸ÀÚ¸é, getByte ´Â ¹è¿­¿¡ µ¥ÀÌÅ͸¦ ¹ÞµÇ, 2¹øÂ° ÀÎÀÚÀÎ 0ºÎÅÍ 3¹øÂ° ÀÎÀÚÀÎ ¹è¿­ÀÇ ±æÀÌ ¸¸Å­ ±×·¯´Ï±î, 1024 ±îÁö ÀúÀåÇÒ ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. SocketFlags ¿É¼ÇÀº none À¸·Î ¿©±â¼­ »ç¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù.

Âü°í·Î Receive ³ª Send ¸Þ¼ÒµåÀÇ °æ¿ì int ÇüÀ¸·Î ¼Û/¼ö½ÅµÈ µ¥ÀÌÅÍÀÇ ±æÀ̸¦ ¸®ÅÏÇÏ°Ô µË´Ï´Ù.

int gDataLength = Client.Receive(getByte,0,getByte.Length,SocketFlags.None);

ÀÌ·±½ÄÀ¸·Î gDataLength º¯¼öÀÇ °ªÀ» üũÇÏ¿© µ¥ÀÌÅͰ¡ À¯¹«¸¦ È®ÀÎ ÇÒ ¼ö µµ ÀÖ½À´Ï´Ù.

Ŭ¶óÀ̾ðÆ®Ãø ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö

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

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

        public const int sPort = 5000;

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

            IPAddress serverIP = IPAddress.Parse("127.0.0.1");
            IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);

            socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            Console.WriteLine("-----------------------------------------------------");
            Console.WriteLine(" ¼­¹ö·Î Á¢¼ÓÀ» ½ÃÀÛÇÕ´Ï´Ù. [¿£Å͸¦ ÀÔ·ÂÇϼ¼¿ä] ");
            Console.WriteLine("-----------------------------------------------------");
            Console.ReadLine();

            socket.Connect(serverEndPoint);

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

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

                if(sendstring != String.Empty)
                {
                    setbyte = Encoding.UTF7.GetBytes(sendstring);
                    socket.Send(setbyte,0,setbyte.Length,SocketFlags.None);

                    socket.Receive(getbyte,0,getbyte.Length,SocketFlags.None);
                    getstring = Encoding.UTF7.GetString(getbyte);
                    Console.WriteLine(">>¼ö½ÅµÈ µ¥ÀÌÅÍ :{0} | ±æÀÌ{1}" , getstring , getstring.Length);
                }
                             }
        }
    }
}

¼­¹ö Ãø ¼Ò½º¸¦ À¯½ÉÈ÷ º¸¼Ì´Ù¸é ºñ½ÁÇÑ ºÎºÐÀÌ ¸¹´Ù´Â°ÍÀ» ¾Æ½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ¼­¹öÃøÀ» ÀÌÇØÇϼ̴ٸé Ŭ¶óÀ̾ðÆ®Ãøµµ ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

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

    public const int sPort = 5000;

¼­¹öÃø¿¡¼­ ¼±¾ðÇÑ º¯¼öµé°ú °°Àº ¸ñÀûÀ¸·Î ¾²ÀÏ Å¬¶óÀÌ¾ðÆ® º¯¼ö µéÀÔ´Ï´Ù. ÇѰ¡Áö Áý°í ³Ñ¾î°¥ °ÍÀº sPort ºÎºÐÀÔ´Ï´Ù. ¼­¹ö¿¡¼­´Â 1 ~ 1024 Æ÷Æ®(½Ã½ºÅÛ¿¡¼­ ÁöÁ¤µÈÆ÷Æ®)¸¦ ÇÇÇØ ÀÓÀ¸·Î ÁöÁ¤Çß½À´Ï´Ù¸¸, Ŭ¶óÀÌ¾ðÆ®´Â ¼­¹ö·ÎÀÇ Á¢¼ÓÀ» ÇØ¾ß Çϱ⠶§¹®¿¡ ¼­¹öÃøÀÇ Æ÷Æ®¸¦ EndPoint Æ÷Æ®·Î ÀÔ·ÂÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.

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

    IPAddress serverIP = IPAddress.Parse("127.0.0.1");
    IPEndPoint serverEndPoint = new IPEndPoint(serverIP,sPort);

Console.Readline() À¸·Î ¼ö½ÅµÉ ¹®ÀÚ¿­À» ÀúÀåÇÒ sendstring º¯¼ö¿Í ¼­¹ö·ÎºÎÅÍ ¹ÞÀº byte ŸÀÔÀÇ µ¥ÀÌÅ͸¦ ¹®ÀÚ¿­·Î ÀúÀåÇÒ getstring º¯¼ö¸¦ °¢°¢ ¼±¾ðÇÏ¿´½À´Ï´Ù. ¼­¹öÃø°ú ¸¶Âù°¡Áö·Î byte <-> string , string <-> byte º¯È¯ °úÁ¤Àº System.Text ³×ÀÓ½ºÆäÀ̽ºÀÇ Encdoing °´Ã¼¸¦ ÀÌ¿ëÇØ¼­ º¯È¯ ÇÏ¿´½À´Ï´Ù. ¸¶Áö¸· 2ÁÙÀº ¸¹ÀÌ º» µíÇÑ ¼Ò½ºÀÔ´Ï´Ù. ±×·¸½À´Ï´Ù. ¼ÒÄÏÀÌ bind ÇÒ ¼­¹öÃø EndPoint ÀÎ ¿¬°á Á¾Á¡ÀÌ µÇ°Ú½À´Ï´Ù.

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

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

    socket.Connect(serverEndPoint);

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

IPv4 ¿Í TCP ÇüÅÂÀÇ ¼Ó¼ºÀ¸·Î ¼ÒÄÏÀ» »ý¼ºÇϰí, ¼­¹öÃøÀ¸·Î Á¢¼ÓÇÒ EndPoint ¸¦ ¸Å°³ °´Ã¼·Î ³Ñ°Ü Á¢¼ÓÀ» ½ÃµµÇÕ´Ï´Ù. À̶§ Á¢¼Ó ÇÏ´Â ½ÃÁ¡À» ±ÇÇÑÀ» À¯Àú¿¡°Ô ÁÖ±âÀ§ÇØ ¸Þ½ÃÁö¸¦ Ãâ·ÂÈÄ Console.ReadLine() ¸í·ÉÀ» ÁÖ¾î Àá½Ã ´ë±â ½ÃÄ×½À´Ï´Ù. ¿¬°áÀÌ ¿Ï·áµÇ¸é Socket °´Ã¼ÀÎ socket ÀÇ ¼Ó¼ºÁß Connected ¼Ó¼ºÀ» ÀÌ¿ëÇØ¼­ Á¢¼ÓÀÌ ¿Ï·áµÇ¾ú´ÂÁö °Ë»çÇÕ´Ï´Ù. (Á¢¼ÓÀÌ Á¤»óÀûÀ¸·Î ÀÌ·ç¾î Á³À» °æ¿ì true ¸¦ ¸®ÅÏÇÕ´Ï´Ù.)

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

    if(sendstring != String.Empty)
    {
        setbyte = Encoding.UTF7.GetBytes(sendstring);
        socket.Send(setbyte,0,setbyte.Length,SocketFlags.None);
        socket.Receive(getbyte,0,getbyte.Length,SocketFlags.None);
        getstring = Encoding.UTF7.GetString(getbyte);
        Console.WriteLine(">>¼ö½ÅµÈ µ¥ÀÌÅÍ :{0} | ±æÀÌ{1}" , getstring , getstring.Length);
    }
}

Ŭ¶óÀÌ¾ðÆ® ºÎºÐ¿¡¼­µµ ¹«ÇÑ ·çÇÁ·Î µ¹¸° ÀÌÀ¯°¡ Àִµ¥, äÆÃ°ú ºñ½ÁÇÑ È¿°ú·Î °è¼ÓÇØ¼­ Å×½ºÆ® ÇØº¸±â À§Çؼ­ÀÔ´Ï´Ù. ·çÇÁ¸¦ µ¹¸é¼­ sendstring = Console.ReadLine();ºÎºÐ¿¡ ¸ØÃç¼­ »ç¿ëÀÚ ÀÔ·ÂÀ» ±â´Ù¸³´Ï´Ù.

setbyte = Encoding.UTF7.GetBytes(sendstring);

»ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ µ¥ÀÌÅ͸¦ ´ã°íÀÖ´Â sendstring º¯¼ö³»¿ëÀ» Encoding °´Ã¼ÀÇ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼­ UTF7 Æ÷¸ËÀ¸·Î Byte¹è¿­·Î ³Ñ±â´Â ¸ð½À´Ï´Ù. ÇѱÛÀ» UTF7 Æ÷¸ËÀ» ÀÌ¿ëÇØ¾ß ±úÁöÁö ¾Ê°í Á¦´ë·Î Àü¼ÛµË´Ï´Ù. socket.Send(setbyte,0,setbyte.Length,SocketFlags.None); ·Î ÀÔ·ÂµÈ µ¥ÀÌÅ͸¦ ¼­¹öÃøÀ¸·Î Àü¼ÛÇÏ¸é ¼­¹öÃø¿¡¼­´Â ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î µÇµ¹·Áº¸³»¹Ç·Î ¹Ù·Î Receive ÇÏ¿© ¼­¹ö·Î ºÎÅÍÀÇ ¼ö½ÅÀÌ Á¤»óÀûÀÎÁö È®ÀÎ ÇÕ´Ï´Ù.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

À§¿Í °°ÀÌ ¼Ò½º¸¦ ÀÛ¼ºÇϼÌÀ¸¸é ÀÌÁ¦ ½ÇÇàÀ» ÇÕ´Ï´Ù.

ÀÚ~~ 3°­¿¡¼­ÀÇ ¼Ò½º¿Í °°ÀÌ ¼ö½Åµ¥ÀÌÅÍ ÀÌÀ¯ÀÇ Ãâ·Â ¹®ÀÚ¿­ °úÀÇ »çÀ̰¡ ¸¹ÀÌ ¶³¾îÁø°ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ¼ö½Å/¹ß½Å ¹öÆÛ·Î »ç¿ëµÇ´Â byte ¹è¿­ÀÇ Å©±â ¶§¹®Àε¥.. ¿ì¸®°¡ "hi" ¶ó°í ´ÜÁö 2byte ¸¸ ¹ß¼ÛÇߴµ¥ ¾Æ·¡¿Í °°ÀÌ..

Client.Receive(getByte,0,getByte.Length,SocketFlags.None);

0 ~ 1024 (getByte.Length) ¸¸Å­À» ¹ß¼ÛÇϰí, ¼ö½ÅÇϱ⠶§¹®¿¡.. ÀÌ·¯ÇÑ Çö»óÀÌ ¹ß»ýµÈ °ÍÀÔ´Ï´Ù.

Áï, 1024 byte Áß ¸Ç¾Õ¿¡´Â hi¶ó°í µ¥ÀÌÅͰ¡ µé¾î°¡Áö¸¸ ³ª¸ÓÁö ºÎºÐÀº ¸ðµÎ °ø¹éÀ¸·Î ÃʱâÈ­ µÈ °ÍÀÔ´Ï´Ù.(½ÇÁ¦·Î byte ¹è¿­¾È¿¡´Â 0 À¸·Î ÃʱâÈ­ µË´Ï´Ù.)

ÀÚ ±×·³ ÀÏ´Ü Àú·¯ÇÑ Çö»óÀÌ ¹ß»ýµÇÁö ¾Êµµ·Ï ¼Ò½º¸¦ ¼öÁ¤ÇØ º¸°Ú½À´Ï´Ù.

¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ® ¼Ò½º¿¡ ¾Æ·¡ÀÇ ¸Þ¼Òµå¸¦ Ãß°¡ÇÕ´Ï´Ù.

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;
}

ÀÌ ¸Þ¼Òµå°¡ ÇÏ´ÂÀÏÀº À§ÀÇ ¹®Á¦Á¡À» ÇØ°áÇϱâ À§ÇÑ ¸Þ¼ÒµåÀÔ´Ï´Ù. ¸Þ¼ÒµåÀÇ ½Ã±×³ÊÃĸ¦ º¸¸é byte ¹è¿­ÀÇ type À» °®´Â sData º¯¼ö·Î µ¥ÀÌÅÍ ¹è¿­À» ³Ñ±é´Ï´Ù. ±×·³ ³»ºÎ¿¡¼­´Â for ¹®À» sData °¡ ¹ÞÀº ¹è¿­ÀÇ sData.Length ±îÁö µ¹¸é¼­ (byte)sData[i] != (byte)0 À϶§ ±îÁö Áï, »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ µ¥ÀÌÅͰ¡ ¾Æ´Ñ byte ¹è¿­ÀÇ ÃʱâÈ­ ¹®ÀÚÀÎ (byte)0 ÀÌ ³ª¿À´Â ¹è¿­ÀÇ Ã·ÀÚ¸¦ ¾Ë¾Æ³»¿© int ÇüÅ·Π¸®ÅÏÇÏ°Ô µË´Ï´Ù.

±×¸®°í ¼­¹öÃøÀÇ ¼Ò½º¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.

[¿øº»¼Ò½º]
if (stringbyte != String.Empty)
{
    Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ:{0} | ±æÀÌ:{1}",stringbyte,stringbyte.Length);
    setByte = Encoding.UTF7.GetBytes(stringbyte);
    Client.Send(setByte,0,setByte.Length,SocketFlags.None);
}
[¼öÁ¤ÈÄ ¼Ò½º]
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);
    Client.Send(setByte,0,setByte.Length,SocketFlags.None);
}

byteArrayDefrag ¸Þ¼Òµå·ÎºÎÅÍ ¼ö½ÅÇÑ return endLength; °ªÀ» getValueLength ·Î ¼ö½ÅÇÏ¿©,

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

¹è¿­ÀÇ ¹üÀ§¸¦ ÁöÁ¤ÇÏ¿© string À¸·Î ¸®ÅÏÇϱâÀ§ÇØ ¿À¹ö·ÎµåµÈ ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

stringbyte = Encoding.UTF7.GetString(getByte,0,getValueLength+1);
Console.WriteLine("¼ö½Åµ¥ÀÌÅÍ:{0} | ±æÀÌ:{1}",stringbyte,getValueLength+1);

¹ØÁÙ ±×Àº ºÎºÐÀ» º¸¸é +1À» Çߴµ¥ byteArrayDefrag ¸Þ¼Òµå°¡ ¸®ÅÏÇÏ´Â °ªÀº À§¿¡¼­ ¼³¸íÇÑ °Íó·³ ¹è¿­ÀÇ Ã·ÀÚ À̱⠶§¹®¿¡ +1À» ÇØÁá½À´Ï´Ù. ¹è¿­Àº 0ºÎÅÍ ½ÃÀÛÇϱ⠶§¹®¿¡ "hi" ¶ó°í 2¹ÙÀÌÆ®¸¦ ÀÔ·ÂÇÒ °æ¿ì ¾Æ·¡¿Í °°ÀÌ 2byte°¡ ÀÔ·Â µÇ¾úÁö¸¸ ÷ÀÚ´Â ±æÀÌÀÇ -1 À» °¡¸®Å°°í Àֱ⠶§¹®¿¡ +1À» ÇØÁØ °ÍÀÔ´Ï´Ù.

sData ¹è¿­ ÷ÀÚ 0 1 2 3 4
ÀÔ·ÂµÈ µ¥ÀÌÅÍ h i (byte)0 (byte)0 (byte)0

Ŭ¶óÀÌ¾ðÆ® ºÎºÐµµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. À§ÀÇ ¸Þ¼Òµå¸¦ Ãß°¡ÇÏ°í ¾Æ·¡¿Í °°ÀÌ Å¬¶óÀÌ¾ðÆ® ºÎºÐµµ ¼öÁ¤ÇØ ÁÝ´Ï´Ù.

[¿øº»¼Ò½º]
if(sendstring != String.Empty)
{
    setbyte = Encoding.UTF7.GetBytes(sendstring);
    socket.Send(setbyte,0,setbyte.Length,SocketFlags.None);

    socket.Receive(getbyte,0,getbyte.Length,SocketFlags.None);
    getstring = Encoding.UTF7.GetString(getbyte);
    Console.WriteLine(">>¼ö½ÅµÈ µ¥ÀÌÅÍ :{0} | ±æÀÌ{1}" , getstring , getstring.Length);
}
[¼öÁ¤ÈÄ ¼Ò½º]
if(sendstring != String.Empty)
{
    int getValueLength = 0;
    setbyte = Encoding.UTF7.GetBytes(sendstring);
    socket.Send(setbyte,0,setbyte.Length,SocketFlags.None);
    socket.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);
}

ÀÌÁ¦ ¼öÁ¤µÈ ¼Ò½º·Î ½ÇÇàÇØ º¸°Ú½À´Ï´Ù.

¼öÁ¤µÇ±âÀü °ú º¸¸é ±ò²ûÇÏ°Ô ¼Û/¼ö½Å µÇ´Â ¸ð½ÀÀ» º¸½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÚ ÀÌÁ¦ ¸ðµç ºÎºÐÀÌ È®ÀÎÀÌ ³¡³ª°í, ÇÁ·Î±×·¥À» Á¾·áÇØ º¸°Ú½À´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ÃøÀ» ¸ÕÀú Á¾·áÇϰԵǸé, ¾Æ·¡¿Í °°Àº ¿¹¿Ü¸¦ ¸¸³ª°ÔµÇ´Âµ¥, .Net ¿¡¼­´Â ÀÌ·¯Çå ¿À·ù¿¡ ´ëÇØ ¸ðµÎ ¿¹¿Ü·Î 󸮵Ǹç, ½ÇÁ¦ÀûÀ¸·Î ÇØ´çµÇ´Â ¿¹¿ÜŬ·¡½º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.

À§¿¡¼­ Àá±ñ ¼³¸íµå·ÈÁö¸¸, ¼­¹öÃø ÇÁ·Î±×·¥Àº Á¢¼ÓÇÑ Å¬¶óÀ̾ðÆ®ÀÇ ¼ÒÄϺκР¹«ÇÑ·çÇÁ¸¦ µ¹¸é¼­ Æú¸µÇÏ°Ô µË´Ï´Ù. Áï, ¼­¹öÃø¿¡¼­ ¹«ÇÑ ·çÇÁ¸¦ µ¹¸ç, Ŭ¶óÀ̾ðÆ®ÀÇ ¼ÒÄÏÀ» Æú¸µÇϰí ÀÖ´Â »óÅ¿¡¼­Å¬¶óÀ̾ðÆ®Ãø ÇÁ·Î±×·¥ÀÌ Á¾·á°¡ µÇ¸é¼­ SocketException ÀÌ ¹ß»ýÇϰí, line 37 ¿¡¼­ ¿¹¿Ü¸¦ ¹ß»ý½ÃÄ×½À´Ï´Ù. ¼Ò½º¸¦ º¸¸é

line 37 : Client.Receive(getByte,0,getByte.Length,SocketFlags.None);

¿¹»ó´ë·Î Ŭ¶óÀ̾ðÆ®ÂÊÀ» º¸°í ÀÖ´ø ºÎºÐÀÔ´Ï´Ù. ¿©·¯ºÐµéÀÌ C# À» Á¶±Ý °øºÎÇØ º¸¼Ì´Ù¸é ¿¹¿Ü¿¡ ´ëÇØ µé¾îº¸¼ÌÀ» °ÍÀ̰í À̺κп¡ ´ëÇØ¼­ ½±°Ô ÇØ°á ÇÏ½Ç ¼ö ÀÖÀ¸¸®¶ó »ý°¢ÀÌ µË´Ï´Ù. ±×·³ ÀÌ·¯ÇÑ °©ÀÛ½º·± ¿À·ù¸¦ ¿¹¿Ü·Î ¸Å²ô·´°Ô ó¸®ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

¼­¹öÃø ¼Ò½º¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù. Àüü ºÎºÐÀ» ¸ðµÎ °¨½Ñ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù.

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

    if(Client.Connected)
    {
        - Áß°£ »ý·« -
    }
}
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();
    Client.Close();
}

ÀÚ~~ ´Ù½Ã Çѹø º¹½ÀÇÏ´Â Àǹ̿¡¼­ try ~ catch ±¸¹®Àº À̿Ͱ°ÀÌ ¿¹¿Ü°¡ ¹ß»ýÇϱ⠽¬¿î ºÎºÐ¿¡ ÇÁ·Î±×·¡¸Ó°¡ ¿¹¿Ü¸¦ Çڵ鸵À» Çϱâ À§ÇØ »ç¿ëµË´Ï´Ù. À§ÀÇ ¼Ò½º¸¦ Àá±ñ »ìÆìº¸¸é

2°³ÀÇ Catch ±¸¹®À» º¼ ¼ö ÀÖ½À´Ï´Ù. À§¿¡¼­ ¾Æ·¡·Î ³»·Á¿À´Â catch Àϼö·Ï ÀϹÝÀûÀ̾î¾ß ÇÕ´Ï´Ù. ¹Ý´ë·Î ¸»Çϸé, ¿¹¿Ü°¡ ¹ß»ýÇϱ⠽¬¿î ExceptionºÎÅÍ catch Àâ¾Æ³»Áà¾ß ±×¿¡´ëÇÑ È®½ÇÇÑ Ã³¸®³ª ¸Þ½ÃÁö¸¦ À¯Àú¿¡°Ô º¸¿©ÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÏ´Ü Àú´Â ¿¹¿Ü°´Ã¼°¡ °¡Áö°í ÀÖ´Â ÀϹÝÀûÀº ¿À·ù ¸Þ½ÃÁö¸¦ º¸¿©ÁÖµµ·Ï Çß½À´Ï´Ù. ±×¸®°í finally ºÎºÐ¿¡¼­ Á¾·áÀü¿¡ ¼ÒÄϰ´Ã¼¸¦ ¸ðµÎ close ÇÏ¿© °´Ã¼ÀÇ »ç¿ëÀÌ ³¡³ª°í ¸®¼Ò½º¸¦ ¹ÝȯÇÕ´Ï´Ù. GC ¿¡ ÀÇÇØ °ü¸® µÇ°ÚÁö¿ä.

ÀÚ ÀÌÁ¦ ¿À·ùµµ ó¸® ±ò²ûÇÏ°Ô Ã³¸® Çß½À´Ï´Ù. ±×·±µ¥ ÇѰ¡Áö ¹®Á¦Á¡ÀÌ ¶Ç ³²¾Ò½À´Ï´Ù. ¾Æ·¡ ±×·³À» º¸½Ã¸é..

óÀ½ ¹Ú½ºÇÑ ºÎºÐÀ» º¸½Ã¸é "°¡³ª´Ù¶ó¸¶¹Ù" ¶ó°í ¼­¹ö·Î Àü¼ÛÇÏ°í ¼ö½Å±îÁö È®ÀÎÇÏ¿´½À´Ï´Ù. ±×´ÙÀ½ ´Ù½Ã "°¡³ª" ¶ó°í Àü¼ÛÇÏ¸é ¼­¹öÃøÀ¸·ÎºÎÅÍ µÇµ¹¾Æ¿Â µ¥ÀÌÅÍÀÇ °¡³ªµÞºÎºÐ¿¡(ÁÙÄ£ºÎºÐ) ¾²·¹±â °ª °°Àº°ÍÀÌ Æ÷ÇԵǾîÀú ³ª¿É´Ï´Ù. Áï, ÀÌ¹Ì Àü¿¡ ¹ß¼ÛÇÑ µ¥ÀÌÅͰ¡ byte ¹è¿­¿¡ ³²¾ÆÀÖ¾î, ¸ÕÀú º¸³½ °ªº¸°¡ ª¾ÆÁö¸é °ãÃĹö·Á¼­ Àú·±Çö»óÀÌ ³ª¿É´Ï´Ù. ÈùÆ®¸¦ µå·ÈÀ¸´Ï ½º½º·Î ÇØ°á °¡´ÉÇϽŠºÐµéÀº Çѹø µµÀüÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.^^ 5°­¿¡¼­´Â ÇÏÀ§¼ÒÄÏÀ¸·Î UDP Åë½ÅÀÌ °¡´ÉÇϵµ·Ï °£´ÜÇÏ°Ô ÀÛ¼ºÇغ» ÈÄ °í¼öÁØ Å¬·¡½ºÀÎ TcpListener ¿Í TcpClient µî¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

´ë¶ô ¼ÒÄÏ¿¡ ´ëÇÑ ¿Ïº®ÇÏÁø ¾ÊÁö¸¸, ¾î´ÀÁ¤µµ °³³äÀ» Àâ¾ÒÀ¸¸®¶ó »ý°¢ÀÌ µì´Ï´Ù. ´ÙÀ½ °­Á ºÎÅÍ´Â ÀÌ·¯ÇÑ ±âº»À» Åä´ë·Î µÇ±â ¶§¹®¿¡ Áß¿äÇÑ ³»¿ëÀÌ´Ï ²À º¹½ÀÇØº¸½Ã°í ÄÚµùÀ» Çѹø¾¿ ÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.

°¥±æÀÌ »ó´çÈ÷ ¸Ù´Ï´Ù. ³¡±îÁö °­Á ÀоîÁּż­ °¨»çÇÕ´Ï´Ù.

 

Back