728x90
반응형
728x170
▶ TcpListener 클래스 : Pending 메소드를 사용해 신규 연결시 기존 연결 버리기 예제
Listen("192.168.0.1", 5001);
728x90
▶ TcpListener 클래스 : Pending 메소드를 사용해 신규 연결시 기존 연결 버리기
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
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 최대 공약수 구하기 (0) | 2021.08.20 |
---|---|
[C#/COMMON] MD5 클래스 : ComputeHash 메소드를 사용해 MD5 해시값 구하기 (0) | 2021.08.20 |
[C#/COMMON] List<T> 클래스 : RemoveAll 메소드를 사용해 조건에 해당하는 요소 삭제하기 (0) | 2021.08.20 |
[C#/COMMON] Process 클래스 : 프로세스명과 사용자명으로 프로세스 죽이기 (0) | 2021.08.20 |
[C#/COMMON] Process 클래스 : 프로세스 소유자명 구하기 (0) | 2021.08.20 |
[C#/COMMON] Regex 클래스 : Replace 정적 메소드를 사용해 공백 문자열 제거하기 (0) | 2021.08.20 |
[C#/COMMON] 특정 타입의 인터페이스 구현 여부 구하기 (0) | 2021.08.19 |
[C#/COMMON] StackFrame 클래스 : GetMethod 메소드를 사용해 이전 실행 메소드 구하기 (0) | 2021.08.19 |
[C#/COMMON/.NET5] dotnet publish 명령 : 단일 exe 파일 생성하기 (0) | 2021.08.19 |
[C#/COMMON] Enum 클래스 : GetValues 정적 메소드를 사용해 최대 열거형 값 구하기 (0) | 2021.08.19 |
댓글을 달아 주세요