반응형
서버 측 코드
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace 에코_서버_응용
{
class Program
{
static void Main(string[] args)
{
Socket sock=null;
try
{
sock = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);//소켓 생성
//인터페이스와 결합
IPAddress addr = IPAddress.Parse("[서버 IP 주소]");
IPEndPoint iep = new IPEndPoint(addr, 10040);
sock.Bind(iep);
//백로그 큐 크기 설정
sock.Listen(5);
Socket dosock;
while (true)//AcceptLoop
{
dosock = sock.Accept();
DoItAsync(dosock);//DoIt
}
}
catch
{
}
finally
{
sock.Close();//소켓 닫기
}
}
delegate void DoItDele(Socket dosock);
private static void DoItAsync(Socket dosock)
{
DoItDele dele = DoIt;
dele.BeginInvoke(dosock, null, null);
}
private static void DoIt(Socket dosock)
{
try
{
byte[] packet = new byte[1024];
IPEndPoint iep = dosock.RemoteEndPoint as IPEndPoint;
while (true)
{
dosock.Receive(packet);
MemoryStream ms = new MemoryStream(packet);
BinaryReader br = new BinaryReader(ms);
string msg = br.ReadString();
br.Close();
ms.Close();
Console.WriteLine("{0}:{1} → {2}", iep.Address,iep.Port,msg);
if(msg == "exit")
{
break;
}
dosock.Send(packet);
}
}
catch
{
}
finally
{
dosock.Close();
}
}
}
}
클라이언트 측 코드
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace 에코_클라이언트_응용
{
class Program
{
static void Main(string[] args)
{
Socket sock = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);//소켓 생성
//인터페이스 결합(옵션)
//연결
IPAddress addr = IPAddress.Parse("[서버 IP 주소]");
IPEndPoint iep = new IPEndPoint(addr, 10040);
sock.Connect(iep);
string str;
string str2;
byte[] packet = new byte[1024];
byte[] packet2 = new byte[1024];
while (true)
{
Console.Write("전송할 메시지:");
str = Console.ReadLine();
MemoryStream ms = new MemoryStream(packet);
BinaryWriter bw = new BinaryWriter(ms);
bw.Write(str);
bw.Close();
ms.Close();
sock.Send(packet);
if(str == "exit")
{
break;
}
sock.Receive(packet2);
MemoryStream ms2 = new MemoryStream(packet2);
BinaryReader br = new BinaryReader(ms2);
str2 = br.ReadString();
Console.WriteLine("수신한 메시지:{0}", str2);
br.Close();
ms2.Close();
}
sock.Close();//소켓 닫기
}
}
}
반응형
'.NET > 네트워크 프로그래밍 C#' 카테고리의 다른 글
.NET 리모팅 (0) | 2020.07.02 |
---|---|
TCP 통신 – Echo 서버 클래스 구현, 이벤트 정의 및 콜백 처리 [C#] (0) | 2020.06.26 |