NetworkStream 의 Read 부분에서 함수에서 빠져 나오지를 않습니다.

TcpListener 를 이용하여 간단한 Client/Server 관련 통신을 하려고 합니다.
서버 관련 코딩을 먼저 진행하고 테스트 중인데 클라이언트에서 메시지롤 보내면 NetworkStream 의 객체를 StreamReader 로 맵핑후 들어온 데이타를 읽으려고 합니다.
그런데 데이타가 들어온걸 인지해서 reader.ReadLine() 함수까지는 실행을 하는데 이 함수안에서 빠져 나오지 못하고 있습니다. 클라이언트 에서 접속을 해지하면 그제야 ReadLine() 함수에서 빠져 나와 데이타를 String 변수에 저장을 합니다.

서버쪽에서 클라이언트 쪽으로 전송은 잘 됩니다.

인터넷에서 관련된 코드를 찾아 보아도 다들 비슷하게 코딩을 해 놓았던데 왜 제가 만든 코드에서만 이런 동작을 하는지 모르겠습니다.

    private void ReceiveClientData()
    {
        string receiveData;

        while (true)
        {
            if (networkstream!.DataAvailable)
            {
                receiveData = streamReader.ReadLine();  <= 이 부분에서 빠져 나오지를 못하다가 클라인트 접속이 끊어지면 그제야 빠져 나와서 들어온 데이타를 처리 합니다. 

                if (OnDataReceived is not null)
                {
                    OnDataReceived(this, new ServerEventArgs(receiveData));
                }
            }
        }
    }

어떤 문제가 있는 것일까요??

2개의 좋아요

뉴라인이 도달하지 않아 생기는 문제입니다. 클라이언트에서 뉴라인(설정에 따라 “\n” 또는 “\r\n”)을 보내는지 확인 바랄께요.

3개의 좋아요

일단 CR 을 넣으니 응답이 들어오기는 합니다. 감사합니다.
그런데 한가지 의문이 있는것이 제가 지금 테스트 하고 있는 클라이언트 프로그램은 ezTerm 이라는 프로그램인데 이게 어떤 업체에서 테스트 용으로 만들어진 프로그램인듯 합니다. 그런데 이 프로그램에서는 따로 CR 을 사용하지 않아도 두개 프로그램을 서버/클라이언트로 각각 설정하고 테스트 하면 주고 받고 잘하는데 streamReader.ReadLine() 함수는 꼭 CR 이 있어야만 하는지 의문입니다.

더블어 CR 을 사용하지 않고 송수신을 할수 있는 방법은 뭐가 있을까요??

2개의 좋아요

일단 readline은 이름 그대로의 기능을 합니다.
한줄을 읽는 기능이죠.

나머지는 여기 참고하시면 됩니다.

4개의 좋아요

데이터를 읽을때
StreamReader.ReadLine() 으로 한줄씩 읽지 않고,

NetworkStream 을 사용한다면 수신할 데이터 길이가 0일때 까지 계속 Read하면서 버퍼에 쌓아서 처리하면 됩니다.

5개의 좋아요