서버 측 포트 수신 대기

서버 측 프로그램을 구성한 뒤 TcpListener로 IP와 포트를 바인딩하고 포트 수신 대기를 시작해 클라이언트 TCP 연결을 기다립니다. 두 가지 구현 버전을 제공합니다: 콘솔 애플리케이션, WinForms 창 애플리케이션.

주요 API 설명

  1. IPAddress:로컬 컴퓨터의 IP 주소를 나타냅니다. IPAddress.Parse("127.0.0.1")은 문자열 IP를 객체로 변환합니다.
    • 127.0.0.1:로컬 루프백 주소로 오직 자기 컴퓨터에서만 접근할 수 있습니다. LAN의 다른 기기에서 접속하려면 192.168.x.x와 같은 내부망 IP를 사용하십시오;
    • IPAddress.Any:컴퓨터의 모든 네트워크 카드 IP에서 연결을 수신 대기합니다.
  2. TcpListener:TCP 서버 수신 대기 클래스입니다. 생성자 매개변수:IP 주소 + 포트 번호
  3. listener.Start()수신 대기 시작. 호출하면 서버가 클라이언트 연결을 기다리기 시작합니다.

콘솔 버전

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

namespace TalkService
{
    class Program
    {
        static void Main(string[] args)
        {
            // IP 객체 생성
            IPAddress ip = IPAddress.Parse("127.0.0.1");
            // 9500 포트를 감시하는 TCP 리스너 생성
            TcpListener listener = new TcpListener(ip, 9500);
            // 수신 대기 시작
            listener.Start();
            Console.WriteLine("수신 대기 시작… E키로 종료");

            ConsoleKeyInfo info;
            do
            {
                info = Console.ReadKey();
            } while (info.Key != ConsoleKey.E);

            listener.Stop(); // 종료 시 수신 대기 중지
        }
    }
}Code language: JavaScript (javascript)

이 코드는 수신 대기만 실행할 뿐 AcceptTcpClient를 호출해 클라이언트 접속을 기다리지는 않습니다. 단지 프로그램이 종료되지 않도록 유지하는 상태입니다.

WinForms 버전

UI 컨트롤:(WinForm 폼에 컨트롤을 추가해 IP, 포트 설정, 전송 텍스트 입력 등 기능을 구현할 수 있습니다)

  • textBoxIP:IP 입력 상자 (기본값 127.0.0.1)
  • textBoxPort:포트 입력 상자 (기본값 9500)
  • buttonStart:【시작】버튼
  • textBoxInfo:정보 표시 텍스트박스
using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

namespace SocketChatServer
{
    public partial class Form1 : Form
    {
        IPAddress ip;
        TcpListener listener;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            // IP 와 포트 파싱
            ip = IPAddress.Parse(this.textBoxIP.Text);
            int port = Convert.ToInt32(this.textBoxPort.Text);
            listener = new TcpListener(ip, port);

            // 수신 대기 시작
            listener.Start();

            // 로그 출력
            string log = $"서버 시작 {DateTime.Now.ToShortTimeString()}\r\n";
            this.textBoxInfo.Text = log + this.textBoxInfo.Text;
        }
    }
}Code language: PHP (php)

해결해야 할 문제

  1. UI 멈춤 현상
    listener.AcceptTcpClient()블로킹 메서드입니다. 버튼 클릭 이벤트의 메인 UI 스레드에서 직접 호출하면 창이 응답 없음 상태가 됩니다. 별도 스레드를 생성하거나 async/await를 사용해 비동기로 클라이언트 연결을 대기해야 합니다.
  2. 포트 충돌
    9500 포트가 다른 프로그램에서 사용 중이면 new TcpListener() 생성 시 예외가 발생합니다. 개발 과정에서 try‑catch로 예외 처리를 추가하십시오.
  3. 다른 호스트 접속
    127.0.0.1을 바인딩하면 자기 컴퓨터에서만 디버깅할 수 있습니다. LAN 내 다른 기기에서 접속하려면 로컬 네트워크 IP를 입력하고 방화벽에서 9500 포트를 허용해야 합니다.

서버 측 포트 수신 대기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다