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>