■ TcpListener 클래스의 Pending 메소드를 사용해 신규 연결시 기존 연결을 버리는 방법을 보여준다.
▶ TcpListener 클래스 : Pending 메소드를 사용해 신규 연결시 기존 연결 버리기 예제 (C#)
1 2 3 |
Listen("192.168.0.1", 5001); |
▶ TcpListener 클래스 : Pending 메소드를 사용해 신규 연결시 기존 연결 버리기 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; #region 리스닝하기 - Listen(serverIPString, serverPort) /// <summary> /// 리스닝하기 /// </summary> /// <param name="serverIPString">서버 IP 문자열</param> /// <param name="serverPort">서버 포트</param> private static void Listen(string serverIPString, int serverPort) { TcpListener tcpListener = null; try { IPAddress serverIPAddress = IPAddress.Parse(serverIPString); tcpListener = new TcpListener(serverIPAddress, serverPort); tcpListener.Start(); byte[] bufferByteArray = new byte[256]; while(true) { Console.WriteLine("연결을 대기합니다..."); TcpClient tcpClient = tcpListener.AcceptTcpClient(); if(tcpClient.Connected) { Console.WriteLine("클라이언트가 연결되었습니다!"); NetworkStream stream = tcpClient.GetStream(); while(true) { if(stream.DataAvailable) { int readCount = stream.Read(bufferByteArray, 0, bufferByteArray.Length); string data = Encoding.ASCII.GetString(bufferByteArray, 0, readCount); Console.WriteLine($"데이터를 수신했습니다 : {data}"); byte[] responseByteArray = Encoding.ASCII.GetBytes("\n데이터 수신\n"); stream.Write(responseByteArray, 0, responseByteArray.Length); } else { if(!tcpListener.Pending()) { continue; } Console.WriteLine("새로운 클라이언트를 발견했습니다."); break; } } Console.WriteLine("클라이언트를 닫습니다."); tcpClient.Close(); } Thread.Sleep(100); } } catch(SocketException exception) { Console.WriteLine($"소켓 예외 : {exception}"); } finally { Console.WriteLine("리스닝을 중단합니다."); tcpListener?.Stop(); } } #endregion |