본문 바로가기
프로그래밍

[C#]TCP 에코 서버 클라이언트 예제

by 건우아빠유리남편 2009. 1. 15.
반응형

--TCP 에코서버--

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//네임스페이스 추가
using System.Net;
using System.Net.Sockets;
using System.IO;


namespace TCPEchoServer
{
    class Program
    {
        const int ServerPort = 4576;

        static void Main(string[] args)
        {
            Socket listenSocket = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);

            IPEndPoint listenEP = new IPEndPoint(IPAddress.Any, ServerPort);

            listenSocket.Bind(listenEP);

            listenSocket.Listen(5);

            //클라이언트 소켓 선언
            Socket clientSocket = null;

            //데이터를 받기위한 버퍼 선언
            byte[] receiveBuffer = new byte[512];

            while (true)
            {

                clientSocket = listenSocket.Accept();

                int receiveSize = clientSocket.Receive(receiveBuffer,
                    512, SocketFlags.None);

                //받으믄 보내기
                while (receiveSize > 0)
                {
                   

                    string temp = Encoding.Unicode.GetString(receiveBuffer);
                    string temp2 = temp.Substring(0, receiveSize);

                    Console.WriteLine(temp2);

                    clientSocket.Send(receiveBuffer, receiveSize, SocketFlags.None);

                    receiveBuffer = new byte[512];

                    receiveSize = clientSocket.Receive(receiveBuffer,
                        512, SocketFlags.None);

                   
               }


                clientSocket.Shutdown(SocketShutdown.Both);

                clientSocket.Close();
                listenSocket.Close();
            }


        }
    }
}
--TCP 에코 클라이언트  --

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace TcpEchoClient
{
    class Program
    {
        private const int ServerPort = 4576;

        static void Main(string[] args)
        {
            Socket clientSocket = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);

            IPEndPoint serverEP = new IPEndPoint(IPAddress.Loopback, ServerPort);

            clientSocket.Connect(serverEP);

            string temp = "";

            while (temp != "exit")
            {

                byte[] sendBuffer;

                //입력받아 보내기

                temp = Console.ReadLine();
                sendBuffer = Encoding.Unicode.GetBytes(temp);
                clientSocket.Send(sendBuffer);

                byte[] receiveBuffer = new byte[512];


                //받아서 화면에 출력
                int receiveSize = clientSocket.Receive(receiveBuffer,
                    512, SocketFlags.None);
                Console.WriteLine("날라온 메세지 : {0}",Encoding.Unicode.GetString(receiveBuffer, 0, receiveSize));

            }

            clientSocket.Shutdown(SocketShutdown.Both);

            clientSocket.Close();

        }
    }
}

사용자 삽입 이미지

반응형

댓글