이 내용은 TCP/IP 소켓 프로그래밍 C#을 참고 하였습니다.

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

class TcpEchoServer {
private const int BUFSIZE = 32; // 수신 버퍼의 크기

static void Main(string[] args) {

if (args.Length > 1) // 파라미터 개수 확인
throw new ArgumentException("Parameters: [<port>]");

int servPort = (args.Length == 1) ? Int32.Parse(args[0]): 7;

TcpListener listener = null;

try {
// 클라이언트의 연결 요청을 수락할 TcpListener 인스턴스를 생성
listener = new TcpListener(IPAddress.Any, servPort);
listener.Start();
} catch (SocketException se) {
Console.WriteLine(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);
}

byte[] rcvBuffer = new byte[BUFSIZE]; // 수신 버퍼
int bytesRcvd; // 현재까지 수신된 바이트 수

for (;;) {
TcpClient client = null;
NetworkStream netStream = null;

try {
client = listener.AcceptTcpClient(); //클라이언트 연결 요청을 수락
netStream = client.GetStream();
Console.Write("Handling client - ");

// 클라이언트가 0의 값을 전송하여 연결을 종료할 때까지 계속 수신
int totalBytesEchoed = 0;
while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0) {
netStream.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
}

Console.WriteLine("echoed {0} bytes.", totalBytesEchoed);

// 스트림과 소켓을 종료하여 이 클라이언트와의 연결을 종료
netStream.Close();
client.Close();
} catch (Exception e) {
Console.WriteLine(e.Message);
netStream.Close();
}
}
}
}


+ Recent posts