본문 바로가기
프로그래밍

[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];

            NetworkStream stream;
            StreamReader reader;
            StreamWriter writer;

            clientSocket = listenSocket.Accept();

            //소켓으로부터 스트림 생성
            stream = new NetworkStream(clientSocket);
            //스트림으로부터 리더 생성
            reader = new StreamReader(stream);
            //스트림으로부터 Writer 생성
            writer = new StreamWriter(stream);

            while (true)
            {
             

                string readBuf = reader.ReadLine();

                //읽어온 데이터가 있으면
                if (readBuf != null && readBuf.Length > 0)
                {
                    Console.WriteLine("받음: " + readBuf);

                    //읽어온 데이터를 다시 전송
                    writer.WriteLine(readBuf);
                    writer.Flush();
                    Console.WriteLine("보냄: " + readBuf);
                }

            }
            writer.Close();
            reader.Close();
            stream.Close();

            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 writeBuf = "";

            //소켓으로부터 스트림을 생성
            NetworkStream stream = new NetworkStream(clientSocket);
            //스트림으로부터 Reader 생성
            StreamReader reader = new StreamReader(stream);
            //스트림으로부터 Writer 생성
            StreamWriter writer = new StreamWriter(stream);

            while (writeBuf != "exit")
            {


                //입력받아 보내기

                writeBuf = Console.ReadLine();
                writer.WriteLine(writeBuf);
                writer.Flush();
                Console.WriteLine("보냄 : " + writeBuf);

                //서버로부터 데이터를 받는다
                string readBuf = reader.ReadLine();
                Console.WriteLine("받음 : "+readBuf);


            }
            stream.Close();
            reader.Close();
            writer.Close();
           

            clientSocket.Close();

        }
    }
}

tcp¿¡ÄÚ¼­¹ö½ºÆ®¸²À¸·Îº%B..

반응형

댓글