using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
// [1] 서버 소켓 생성
Socket Server_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// [2] IP, Port 를 "서버 소켓"에 등록
//Server_Socket.Bind(new IPEndPoint(IPAddress.Any, 7000));
IPEndPoint ipt = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7000);
Server_Socket.Bind(ipt);
// [3] 준비된 "서버 소켓"이 클라이언트의 접속 요청을 대기하도록 명령
// 일반적으로 listen은 접속요청이 올 때까지, 블록되어 대기 상태
Server_Socket.Listen(100);
// 클라이언트로부터 대기준인 서버 소켓으로 접속 요청이 들어오면 Listen()이 다음 로직을 진행한다.
// [4] 대기중인 서버 소켓이 Aceept( )를 실행하고, 서버는 클라이언트와 연결이 성공된 소켓을 하나 더 만든다.
Socket Connected_Socket = Server_Socket.Accept(); // 블로킹 함수
// 데이터를 주고 받는 규격 상자 (택배 상자)
// 정해진 버퍼 크기만큼 주고 받기로 약속되어야 한다.
byte[] receiverBuff = new byte[2048];
// [5] 서버 로직은, 연결된 소켓으로 데이터를 주고 받는다.
int len = Connected_Socket.Receive(receiverBuff);
string data = Encoding.UTF8.GetString(receiverBuff, 0, len);
Console.WriteLine("전달받은 데이터 문장 >> \"" + data + "\"");
// 받은것을 다시 보낸다.(Echo)
Connected_Socket.Send(receiverBuff);
// [6] 연결된 소켓을 닫는다.
Connected_Socket.Close();
// 서버를 닫는다.
Server_Socket.Close();
}
}
Clinet
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
// [1] 클라이언트 소켓 생성
Socket Client_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// IP, Port를 IPEndPoint 객체로 만들고, 접속 할 서버의 IP, PORT 정보를 준비한다.
IPEndPoint ipt = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7000);
// [2] 클라이언트 소켓은 Connect 함수를 사용하여 서버로 접속 요청한다.
Client_Socket.Connect(ipt);
// [3] 송수신
// 데이터를 주고 받는 규격 상자 (택배 상자)
// 정해진 버퍼 크기만큼 주고 받기로 약속되어야 한다.
byte[] sendBuff = new byte[2048];
// 보낸다.
string msg = "안녕하세요";
byte[] buffer = Encoding.UTF8.GetBytes(msg);
Client_Socket.Send(buffer);
// 받는다.
byte[] receiverBuff = new byte[2048];
int len = Client_Socket.Receive(receiverBuff);
string data = Encoding.UTF8.GetString(receiverBuff, 0, len);
Console.WriteLine(data);
// [4] 닫는다.
Client_Socket.Close();
}
}