TCP 클라이언트와 TCP 서버

Untitled

TcpClient 클래스

using System;
using System.Net.Sockets;
using System.Text;
 
namespace TcpClient
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. IP 주소와 포트를 지정하고 TCP 연결 
            // TCP용 소켓 만들고 IP 주소와 포트번호 줘서 TCP Connection 연결
            TcpClient tc = new TcpClient("127.0.0.1", 7000);
 
            string msg = "Hello World";
            byte[] buff = Encoding.ASCII.GetBytes(msg);
 
            // 2. NetworkStream을 얻어옴 
            // 아까 만든 소켓에서 Stream을 가져오기
            NetworkStream stream = tc.GetStream();
 
            // 3. 스트림에 바이트 데이타 전송
            // 그 stream에 데이터 전송
            // Write 메서드를 사용하면 이 내용을 서버로 보냄
            // Write(전송할 데이터 있는 바이트 배열, 바이트 배열 내에서 데이터를 읽기 시작할 위치, 전송할 데이터의 크기)
            stream.Write(buff, 0, buff.Length);
 
            // 4. 스트림으로부터 바이트 데이타 읽기
            // 원래 TCP는 나눠져서 올 수 있으므로 While로 다 읽고 끝내야함
            byte[] outbuf = new byte[1024];
            int nbytes = stream.Read(outbuf, 0, outbuf.Length);
            string output = Encoding.ASCII.GetString(outbuf, 0, nbytes);
 
            // 5. 스트림과 TcpClient 객체 닫기
            stream.Close();
            tc.Close();
 
            Console.WriteLine($"{nbytes} bytes: {output}");
        }
    }
}

<aside> 🐿️ Stream : .NET에서 데이터를 읽고 쓰는데 사용되는 추상 클래스

</aside>

<aside> 🐿️ GetBytes : 문자열 → 인코딩해서 바이트 배열로 변환 GetString : 바이트 배열 → 문자열로 디코딩

</aside>

<aside> 🐿️ TcpClient 를 선언하면서 생성자에 IP와 포트번호를 주면 자동으로 서버와 연결 → 생성자에 안주면 나중에 Connect() 메서드를 호출해 명시적으로 연결 가능

</aside>

TcpListener 클래스