[나크21] 캐주얼 미니스커트 치마바지 NK21-P-10
BLOG main image
분류 전체보기 (540)
▩▩ 개인공간 ▩▩ (124)
▩▩ 문화생활 ▩▩ (45)
▩▩ 게임 ▩▩ (211)
▩▩ 일러스트 ▩▩ (46)
▩▩ 프로그래밍 ▩▩ (73)
▩▩ 코스메틱 ▩▩ (1)
▩▩ 여행 ▩▩ (0)
* 셈틀 롤드컵 * (1)
반응형
Total
Today hit
Yesterday hit
▩▩ 프로그래밍 ▩▩/Socket Programming
반응형

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets; //socket programing을 위한 네임스페이스.
using System.IO;

namespace test_server
{
    class SimpleTcpSrvr
    {
        public static void Main()
        {

            string data;
            string input;
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);

            // 네트워크의 끝점을 IP번호와 포트번호 객체화 시킵니다.

            Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            /* 이제 소켓을 생성 시키는데 생성시킬때의 파라미터가 AddressFamily가 뜻하는 것은 Socket의 주소지정
             스키마를 정의 하는 것입니다. interNetwork 는 기존 IP주소체계인 IP 버전 4.에 대한 주소입니다.
             SocketType은 말그대로 소켓의 종류를 가져 오는 것인데 Stream은 데이터 중복이나 경계 유지 없이
             신뢰성 있는 양방향 연결 기반의 바이트 스트림을 지원합니다.
             ProtocolType은 정해진 통신 규약을 정의 하는 것인데 이경우 신뢰성이 있는 TCP로 통신함을 의미합니다.*/

            newsock.Bind(ipep);//정의된 네트워크의 끝점으로 newsock를 bind시킵니다.
            newsock.Listen(10);//newsock을 수신대기 상태로 놓습니다.

            Console.WriteLine("Waiting for a client...");

            Socket client = newsock.Accept();//client에서 수신을 요청하면 접속합니다.
            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;

            // client의 네트워크 끝점을 가져옵니다.
            Console.WriteLine("Connected with {0} at port {1}", clientep.Address, clientep.Port);

            //연결(데이터를 보내고 받는 메서드를 제공)   
            NetworkStream ns = new NetworkStream(client);
            //스트림에 텍스트 메시지를 읽고 쓰는 작업
            StreamReader sr = new StreamReader(ns);
            StreamWriter sw = new StreamWriter(ns);

            string welcome = "Welcome to my test server";
            //지정된 데이터에 라인 피드값을 추가하여 해당 스트림에 전송
            sw.WriteLine(welcome);
            sw.Flush();//사용한 스트림을 비워줍니다.

            sw.WriteLine(clientep.Address);
            sw.Flush();

            sw.WriteLine(clientep.Port);
            sw.Flush();

            while (true)
            {
                try
                {
                    data = sr.ReadLine();//client에서 받은 string을 data에 담습니다.
                    Console.WriteLine("Client Receive {0}-{1} << {2} ", clientep.Address,
                     clientep.Port, data);
                }
                catch (SocketException e)
                {
                    Console.WriteLine(e);
                }
                Console.Write("Client Send {0}-{1} >> ", ipep.Address, ipep.Port);

                input = Console.ReadLine();//client에서 받은 string을 data에 담습니다.
                if (input == "exit") break;

                //client에서 받은 input data가 exit라면 while문을 빠져나갑니다.
                sw.WriteLine(input);//client에서 받았던 input data를 다시 보냅니다.
                sw.Flush();

            }
            Console.WriteLine("Disconnected from {0}", clientep.Address);
            ns.Close(); //
            sw.Close();   //stream을 닫습니다.
            ns.Close();//
            client.Shutdown(SocketShutdown.Both);//소켓을 비활성화 시킵니다.
            client.Close();//소켓을 닫습니다.
        }
    }

}

출처 : http://keep2smile.tistory.com/trackback/146
반응형