Socket Client
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace sockcli
{
class Program
{
static void Main(string[] args)
{
// (1) 소켓 객체 생성 (TCP 소켓)
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// (2) 서버에 연결
var ep = new IPEndPoint(IPAddress.Parse("192.168.1.13"), 7000);
sock.Connect(ep);
string cmd = string.Empty;
byte[] receiverBuff = new byte[8192];
Console.WriteLine("Connected... Enter Q to exit");
// Q 를 누를 때까지 계속 Echo 실행
while ((cmd = Console.ReadLine()) != "Q")
{
byte[] buff = Encoding.UTF8.GetBytes(cmd);
// (3) 서버에 데이타 전송
sock.Send(buff, SocketFlags.None);
// (4) 서버에서 데이타 수신
int n = sock.Receive(receiverBuff);
string data = Encoding.UTF8.GetString(receiverBuff, 0, n);
Console.WriteLine(data);
}
// (5) 소켓 닫기
sock.Close();
}
}
}
Socket Server
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace socksrv
{
class Program
{
static void Main(string[] args)
{
// (1) 소켓 객체 생성 (TCP 소켓)
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// (2) 포트에 바인드
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 7000);
sock.Bind(ep);
// (3) 포트 Listening 시작
sock.Listen(10);
// (4) 연결을 받아들여 새 소켓 생성 (하나의 연결만 받아들임)
Socket clientSock = sock.Accept();
byte[] buff = new byte[8192];
while (!Console.KeyAvailable) // 키 누르면 종료
{
// (5) 소켓 수신
int n = clientSock.Receive(buff);
string data = Encoding.UTF8.GetString(buff, 0, n);
Console.WriteLine(data);
// (6) 소켓 송신
clientSock.Send(buff, 0, n, SocketFlags.None); // echo
}
// (7) 소켓 닫기
clientSock.Close();
sock.Close();
}
}
}
TCP Client
using System;
using System.Net.Sockets;
using System.Text;
namespace TcpCli
{
class Program
{
static void Main(string[] args)
{
// (1) IP 주소와 포트를 지정하고 TCP 연결
TcpClient tc = new TcpClient("127.0.0.1", 7000);
//TcpClient tc = new TcpClient("localhost", 7000);
string msg = "Hello World";
byte[] buff = Encoding.ASCII.GetBytes(msg);
// (2) NetworkStream을 얻어옴
NetworkStream stream = tc.GetStream();
// (3) 스트림에 바이트 데이타 전송
stream.Write(buff, 0, buff.Length);
// (4) 스트림으로부터 바이트 데이타 읽기
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}");
}
}
}
static void Main(string[] args)
{
// (1) IP 주소와 포트를 지정하고 TCP 연결
TcpClient tc = new TcpClient("localhost", 7000);
string msg = "Hello World";
byte[] buff = Encoding.ASCII.GetBytes(msg);
// (2) NetworkStream을 얻어옴
NetworkStream stream = tc.GetStream();
// (3) 스트림에 바이트 데이타 전송
stream.Write(buff, 0, buff.Length);
// (4) 서버가 Connection을 닫을 때가지 읽는 경우
byte[] outbuf = new byte[1024];
int nbytes;
MemoryStream mem = new MemoryStream();
while ((nbytes = stream.Read(outbuf, 0, outbuf.Length)) > 0)
{
mem.Write(outbuf, 0, nbytes);
}
byte[] outbytes = mem.ToArray();
mem.Close();
// (5) 스트림과 TcpClient 객체 닫기
stream.Close();
tc.Close();
Console.WriteLine(Encoding.ASCII.GetString(outbytes));
}
TCP Server
using System.Net.Sockets;
using System.Net;
namespace TcpSrv
{
class Program
{
static void Main(string[] args)
{
// (1) 로컬 포트 7000 을 Listen
TcpListener listener = new TcpListener(IPAddress.Any, 7000);
listener.Start();
byte[] buff = new byte[1024];
while (true)
{
// (2) TcpClient Connection 요청을 받아들여
// 서버에서 새 TcpClient 객체를 생성하여 리턴
TcpClient tc = listener.AcceptTcpClient();
// (3) TcpClient 객체에서 NetworkStream을 얻어옴
NetworkStream stream = tc.GetStream();
// (4) 클라이언트가 연결을 끊을 때까지 데이타 수신
int nbytes;
while ((nbytes = stream.Read(buff, 0, buff.Length)) > 0)
{
// (5) 데이타 그대로 송신
stream.Write(buff, 0, nbytes);
}
// (6) 스트림과 TcpClient 객체
stream.Close();
tc.Close();
// (7) 계속 반복
}
}
}
}
UDP Client
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using static System.Console;
namespace UdpCli
{
class Program
{
static void Main(string[] args)
{
// (1) UdpClient 객체 성성
UdpClient cli = new UdpClient();
string msg = "안녕하세요";
byte[] datagram = Encoding.UTF8.GetBytes(msg);
// (2) 데이타 송신
cli.Send(datagram, datagram.Length, "127.0.0.1", 7777);
WriteLine("[Send] 127.0.0.1:7777 로 {0} 바이트 전송", datagram.Length);
// (3) 데이타 수신
IPEndPoint epRemote = new IPEndPoint(IPAddress.Any, 0);
byte[] bytes = cli.Receive(ref epRemote);
WriteLine("[Receive] {0} 로부터 {1} 바이트 수신", epRemote.ToString(), bytes.Length);
// (4) UdpClient 객체 닫기
cli.Close();
}
}
}
UDP Server
using System;
using System.Net;
using System.Net.Sockets;
namespace UdpSrv
{
class Program
{
static void Main(string[] args)
{
// (1) UdpClient 객체 성성. 포트 7777 에서 Listening
UdpClient srv = new UdpClient(7777);
// 클라이언트 IP를 담을 변수
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
while(true)
{
// (2) 데이타 수신
byte[] dgram = srv.Receive(ref remoteEP);
Console.WriteLine("[Receive] {0} 로부터 {1} 바이트 수신", remoteEP.ToString(), dgram.Length);
// (3) 데이타 송신
srv.Send(dgram, dgram.Length, remoteEP);
Console.WriteLine("[Send] {0} 로 {1} 바이트 송신", remoteEP.ToString(), dgram.Length);
}
}
}
}
반응형
'Programming > C#' 카테고리의 다른 글
[C#] #1 - Serial Communication 기초 (0) | 2020.07.02 |
---|