ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# - ECHO 채팅 서버 - Server 코드
    스마트팩토리 개발자 교육(23.05.08 ~ 23.10.27)7/네트워크 기초이론 2023. 5. 18. 17:20

    *서버

    1. TcpListener에 바인딩할 IpAdress와 ,port 번호를 지정해 주고 

    서버는 리슨을 시작한다

                // IP 4바이트 주소를 직접 숫자로 적어서 사용
                IPAddress ip2 = new IPAddress(new byte[] { 0, 0, 0, 0 });             
                // 문자를 ip 주소로 변환
                IPAddress ip1 = IPAddress.Parse("0.0.0.0");
                int port = 9876;
    
                // Listener 생성
                // IP, Port 번호가 필요하다
                TcpListener listener = new TcpListener(ip1, port);
    
                listener.Start();

    2. 채팅을 받을 buffer와 인코딩한 정보를 저장한 string을 생성해준다

                byte[] buff = new byte[1024];
    
                string Listenmsg = "";

    3. Client 통신 요청을 받을 TcpClient 와 정보를 주고받을 NetworkStream 생성한다

     		// 클라이언트 통신요청 받는 TcpClient 생성
                    TcpClient tcpClient = listener.AcceptTcpClient();
    
                    // 클라이언트와 정보를 주고 받을 stream 생성
                    // NetworkStream 객체 저장
                    NetworkStream stream = tcpClient.GetStream();

    4. stream.Read를 통해 Client가 전달한 메시지를 buffer에 담는다

    4-1 nbytes가 0보다 커지면 전달한 메시지가 있다는 뜻 이므로 반복문을 실행 시킨다

    		int nbytes; // 읽어온 바이트를 저장되는 변수
    
                    // stream.Read(저장할 배열 변수,
                    //             저장을 시작할 배열의 자릿수,
                    //             저장소의 크기 선정)
                    // 읽은 바이트의 수를 반환
                    // 메시지를 받아서 출력하는 코드
                    while ((nbytes=stream.Read(buff, 0, buff.Length))>0) 
                    {
                        Listenmsg = Encoding.UTF8.GetString(buff, 0 , nbytes);
                        Console.WriteLine(Listenmsg);
                    }

    5. Client가 exit를 보내면 통신을 종료하고 stream과 tcpClient를 닫는다

                    if (Listenmsg == "exit") break;
                    // 닫지 않으면 프로그램이 꺼지지 않고 계속 켜진 상태가 된다
                    stream.Close();
                    tcpClient.Close();

    * 풀 코드

    static void Main(string[] args)
            {
                
    
                // IP 4바이트 주소를 직접 숫자로 적어서 사용
                IPAddress ip2 = new IPAddress(new byte[] { 0, 0, 0, 0 });             
                // 문자를 ip 주소로 변환
                IPAddress ip1 = IPAddress.Parse("0.0.0.0");
                int port = 9876;
    
                // Listener 생성
                // IP, Port 번호가 필요하다
                TcpListener listener = new TcpListener(ip1, port);
    
                listener.Start();
    
                byte[] buff = new byte[1024];
    
                string Listenmsg = "";
    
                while (true)
                {
                    // 클라이언트 통신요청 받는 TcpClient 생성
                    TcpClient tcpClient = listener.AcceptTcpClient();
    
                    // 클라이언트와 정보를 주고 받을 stream 생성
                    // NetworkStream 객체 저장
                    NetworkStream stream = tcpClient.GetStream();
                    int nbytes; // 읽어온 바이트를 저장되는 변수
    
                    // stream.Read(저장할 배열 변수,
                    //             저장을 시작할 배열의 자릿수,
                    //             저장소의 크기 선정)
                    // 읽은 바이트의 수를 반환
                    // 메시지를 받아서 출력하는 코드
                    while ((nbytes=stream.Read(buff, 0, buff.Length))>0) 
                    {
                        Listenmsg = Encoding.UTF8.GetString(buff, 0 , nbytes);
                        Console.WriteLine(Listenmsg);
                    }
                    if (Listenmsg == "exit") break;
                    // 닫지 않으면 프로그램이 꺼지지 않고 계속 켜진 상태가 된다
                    stream.Close();
                    tcpClient.Close();
                }
            }

    댓글

Designed by Tistory.