C#¿¡¼ BeginReceive
¸Þ¼µå¸¦ »ç¿ëÇÏ¿© ºñµ¿ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ¼ö½ÅÇÏ°í ÀÖÀ» ¶§, À̸¦ Ãë¼ÒÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù. BeginReceive
ÀÚü¿¡ ´ëÇÑ Ãë¼Ò ¸Þ¼µå´Â ¾øÁö¸¸, ¼ö½Å ÀÛ¾÷À» Áß´ÜÇÏ·Á¸é ¼ÒÄÏÀ» ´Ý°Å³ª, Ç÷¡±× º¯¼ö¸¦ »ç¿ëÇÏ¿© ¼ö½Å ·çÇÁ¸¦ Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù.
Socket socket; // ÀÌ¹Ì ÃʱâÈµÈ ¼ÒÄÏ
bool receiving = true;
// ºñµ¿±â ¼ö½Å ¸Þ¼Òµå
void StartReceiving()
{
byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, , buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), buffer);
}
// ÄÝ¹é ¸Þ¼Òµå
void ReceiveCallback(IAsyncResult ar)
{
if (!receiving)
return;
// µ¥ÀÌÅÍ Ã³¸®
int bytesRead = socket.EndReceive(ar);
// µ¥ÀÌÅÍ Ã³¸® ·ÎÁ÷...
// °è¼Ó ¼ö½Å
StartReceiving();
}
// ¼ö½Å Ãë¼Ò ¸Þ¼Òµå
void CancelReceiving()
{
receiving = false;
socket.Close(); // ¼ÒÄÏ ´Ý±â
}
BeginReceive
¸Þ¼µå¸¦ Ãë¼ÒÇÏ´Â ¹æ¹ýÀº Á÷Á¢ Ãë¼ÒÇÏ´Â ¸Þ¼µå°¡ ¾øÀ¸¹Ç·Î, ¼ÒÄÏÀ» ´Ý°Å³ª Ç÷¡±× º¯¼ö¸¦ »ç¿ëÇÏ¿© ºñµ¿±â ¼ö½ÅÀ» ¼öµ¿À¸·Î Á¦¾îÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
Ä¿¹Â´ÏƼ È°µ¿À» ÇÏ¸é¼ °¡²û ´ñ±ÛÀ» ³²±â´Âµ¥ Ä¿¹Â´ÏƼ ³»ÀÇ Æ¯Á¤ÀÎÀ» ºñ¹æÇϰųª ºÐ¶õÀ» Á¶ÀåÇÏ·Á´Â Àǵµ°¡ ÀÖ´Â°Ô ¾Æ´Õ´Ï´Ù. ±×·³¿¡µµ Á¦ ´ñ±Û¿¡ ¸Å¿ì °ø°ÝÀûÀÎ ´ë´ñ±ÛÀÌ ´Þ¸®´Â °æ¿ì°¡ °£È¤ Àִµ¥ Á¦ ´ñ±Û¿¡ ºÒ¼ÕÇÑ Àǵµ°¡ ÀÖ´Â°Ô ¾Æ´Ï¹Ç·Î ºÒÆíÇϽôõ¶óµµ "ÀÌ·± »ý°¢À» ÇÏ´Â »ç¶÷µµ ÀÖ±¸³ª" ÀÌÁ¤µµ·Î ³Ñ¾î°¡ÁÖ½Ã¸é °¨»çÇÏ°Ú½À´Ï´Ù. º¸ÅëÀÇ °æ¿ì´Â °ø°ÝÀûÀÎ ´ë´ñ±ÛÀ» ¹«½ÃÇÏ°í ³Ñ¾î°¡Áö¸¸ Á¦°¡ °íÁýÀÌ ¼¾ Á¡ÀÌ ÀÖ¾î¼ ´ñ±Û·Î ¾ðÀïÀÌ ½ÃÀÛµÇ¸é ½±°Ô ¸ØÃßÁö ¸øÇÕ´Ï´Ù. Àǹ̾ø´Â ½Î¿òÀ» ÇÏ°í½ÍÁö ¾ÊÀ¸´Ï ´ë´ñ±ÛÀ» ´Þ¸é¼ Àú¸¦ °ø°ÝÇÏ°í ½ÍÀ¸½Ç¶§´Â ½ÅÁßÇÏ°Ô ´Ù½ÃÇѹø »ý°¢ÇØÁÖ¼ÌÀ¸¸é °¨»çÇÏ°Ú½À´Ï´Ù.
C#¿¡¼ BeginAccept
¸Þ¼µå¸¦ »ç¿ëÇØ ºñµ¿±â·Î Ŭ¶óÀ̾ðÆ® ¿¬°áÀ» ¼ö¶ôÇÒ ¶§, À̸¦ Ãë¼ÒÇÏ´Â ¹æ¹ýÀº Begin
¸Þ¼µå ÀÚü¿¡´Â Ãë¼Ò ±â´ÉÀÌ ¾ø±â ¶§¹®¿¡ ¼ÒÄÏ ´Ý°Å³ª, Ç÷¡±×¸¦ÇÏ¿© ¼ö¶ô °ú Á¦¾îÇÏ´Â ¹æ¹ýÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
BeginAccept
È£ÃâÀÌ ¿¹¿Ü¸¦ ¹ß»ý½ÃÄÑ ¼ö¶ôÀ» Á¾·áÇÒ ¼ö ÀÖ½À´Ï´Ù.TcpListener listener; // ÀÌ¹Ì ÃʱâÈµÈ TcpListener ÀνºÅϽº
bool accepting = true;
// ºñµ¿±â ¿¬°á ¼ö¶ô ¸Þ¼Òµå
void StartAccepting()
{
listener.BeginAcceptTcpClient(new AsyncCallback(AcceptCallback), null);
}
// ÄÝ¹é ¸Þ¼Òµå
void AcceptCallback(IAsyncResult ar)
{
if (!accepting)
return;
TcpClient client = listener.EndAcceptTcpClient(ar);
// Ŭ¶óÀ̾ðÆ® ó¸® ·ÎÁ÷...
// °è¼Ó ¼ö¶ô
StartAccepting();
}
// ¼ö¶ô Ãë¼Ò ¸Þ¼Òµå
void CancelAccepting()
{
accepting = false;
listener.Stop(); // ¸®½º³Ê ¼ÒÄÏ ´Ý±â
}
BeginAccept
¸Þ¼µå¸¦ Á÷Á¢ Ãë¼ÒÇÏ´Â ¹æ¹ýÀº ¾øÀ¸³ª, ¼ÒÄÏÀ» ´Ý°Å³ª Ç÷¡±× º¯¼ö¸¦ ÅëÇØ ¼ö¶ô »óŸ¦ °ü¸®ÇÏ¿© ºñµ¿±â ¿¬°á ¼ö¶ôÀ» Á¦¾îÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÔ´Ï´Ù. ÀÌ¿Í °°Àº ¹æ½ÄÀ¸·Î °£´ÜÇÏ°Ô Ãë¼Ò ·ÎÁ÷À» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
C#¿¡¼ ¼ÒÄÏÀ» ¿ÏÀüÈ÷ Á¾·áÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù. ¼ÒÄÏÀ» Á¾·áÇÒ ¶§´Â ÀÚ¿øÀ» ¿Ã¹Ù¸£°Ô Á¤¸®ÇÏ¿© ¸®¼Ò½º ´©¼ö¸¦ ¹æÁöÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ¼ÒÄÏÀ» Á¾·áÇϱâ À§ÇØ ´ÙÀ½ ´Ü°è¸¦ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
¼ÒÄÏÀ» Á¾·áÇϱâ Àü¿¡ ¸ðµç µ¥ÀÌÅÍ Àü¼ÛÀÌ ¿Ï·áµÇ¾ú´ÂÁö È®ÀÎÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. À̸¦ À§ÇØ Shutdown
¸Þ¼µå¸¦ »ç¿ëÇØ Åë½ÅÀ» Á¾·áÇÒ ¼ö ÀÖ½À´Ï´Ù.
¼ÒÄÏÀÇ Close
¶Ç´Â Dispose
¸Þ¼µå¸¦ È£ÃâÇÏ¿© ¼ÒÄÏÀ» Á¾·áÇÕ´Ï´Ù.
¼ÒÄÏ ÀÛ¾÷ Áß¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¹¿Ü¸¦ ó¸®ÇÏ¿© ¾ÈÁ¤¼ºÀ» ³ôÀÔ´Ï´Ù.
using System;
using System.Net.Sockets;
public class SocketExample
{
private Socket socket;
public void InitializeSocket()
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// ¼ÒÄÏ ¿¬°á ¹× ÃʱâÈ ÄÚµå...
}
public void CloseSocket()
{
try
{
// µ¥ÀÌÅÍ Àü¼Û Á¾·á
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
}
}
catch (SocketException ex)
{
Console.WriteLine($"¼ÒÄÏ Á¾·á Áß ¿À·ù ¹ß»ý: {ex.Message}");
}
finally
{
// ¼ÒÄÏ Á¾·á
socket.Close();
socket.Dispose(); // Ãß°¡ÀûÀÎ ÀÚ¿ø ÇØÁ¦¸¦ À§ÇØ Dispose È£Ãâ
Console.WriteLine("¼ÒÄÏÀÌ ¼º°øÀûÀ¸·Î Á¾·áµÇ¾ú½À´Ï´Ù.");
}
}
}
À§ÀÇ ¹æ½ÄÀ¸·Î C#¿¡¼ ¼ÒÄÏÀ» ¿ÏÀüÈ÷ Á¾·áÇÒ ¼ö ÀÖ½À´Ï´Ù. °¢ ´Ü°è¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿¹¿Ü¸¦ ÀûÀýÈ÷ ó¸®ÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù.