서버 측 프로그램을 구성한 뒤 TcpListener로 IP와 포트를 바인딩하고 포트 수신 대기를 시작해 클라이언트 TCP 연결을 기다립니다. 두 가지 구현 버전을 제공합니다: 콘솔 애플리케이션, WinForms 창 애플리케이션.
주요 API 설명
IPAddress:로컬 컴퓨터의 IP 주소를 나타냅니다.IPAddress.Parse("127.0.0.1")은 문자열 IP를 객체로 변환합니다.127.0.0.1:로컬 루프백 주소로 오직 자기 컴퓨터에서만 접근할 수 있습니다. LAN의 다른 기기에서 접속하려면192.168.x.x와 같은 내부망 IP를 사용하십시오;IPAddress.Any:컴퓨터의 모든 네트워크 카드 IP에서 연결을 수신 대기합니다.
TcpListener:TCP 서버 수신 대기 클래스입니다. 생성자 매개변수:IP 주소 + 포트 번호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)
해결해야 할 문제
- UI 멈춤 현상
listener.AcceptTcpClient()는 블로킹 메서드입니다. 버튼 클릭 이벤트의 메인 UI 스레드에서 직접 호출하면 창이 응답 없음 상태가 됩니다. 별도 스레드를 생성하거나async/await를 사용해 비동기로 클라이언트 연결을 대기해야 합니다. - 포트 충돌
9500 포트가 다른 프로그램에서 사용 중이면new TcpListener()생성 시 예외가 발생합니다. 개발 과정에서 try‑catch로 예외 처리를 추가하십시오. - 다른 호스트 접속
127.0.0.1을 바인딩하면 자기 컴퓨터에서만 디버깅할 수 있습니다. LAN 내 다른 기기에서 접속하려면 로컬 네트워크 IP를 입력하고 방화벽에서 9500 포트를 허용해야 합니다.
서버 측 포트 수신 대기
Previous: 개요
Next: TcpClient 클라이언트