°Á Àü Å¿ÀÀÇ Àâ´ã>
ÀÎ±â Æø¹ß~~ ¸¹Àº ºÐµéÀÌ °ü½ÉÀ» °¡Áö°í ±â´Ù¸®½Ã´ø~~ Ç÷¯±×ÀÎ(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
|