문제

나의 예 Tcp Echo Server,어떤 것은 불분명하다.

TcpClient client = null;
NetworkStream netStream = null;

try {
  client = listener.AcceptTcpClient(); 
  netStream = client.GetStream();

  int totalBytesEchoed = 0;
  while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0) {
    netStream.Write(rcvBuffer, 0, bytesRcvd);
    totalBytesEchoed += bytesRcvd;
  }

  netStream.Close();
  client.Close();
} catch {
  netStream.Close();
}

면 서버는 패킷을 수신(동안 반복),그는 데이터를 읽고로 rcvBuffer 고 씁니다.

무엇을 혼란 나이순으로 메시지의 소통을 합니다.은 데이터 작성되었으로 netStream.Write()즉시 전송을 클라이언트(누구도 여전히 보내기),또는 후에만 데이터는 이미 작성하는 스트림(클라이언트)처리됩니다.

다음과 같은 질문을 수도 있습 명확히 이전클라이언트가 보내는 일부 데이터로 작성함으로써 스트림,는 데이터 이동하는 메시지 큐 서버측에서 기다리고 있을 읽을 수 있도록 스트림은 실제로"빈"?는 이유를 설명하는 서버할 수 있어 스트리밍-기 때문에 데이터 제공되는 스트림에서 실제로 버퍼링이 다른 곳에...?

도움이 되었습니까?

해결책

힌트:메소드 호출 NetworkStream.읽을 차단하는 예입니다.

이 책은 절대적으로 올바른--raw 접근 TCP 스트림을 의미하지 않는 모든 종류의 추가"chunking"그리고,이 예제에서 예를 들어,하나의 바이트 수에 처리할 수 있는 시간입니다.그러나 수행하여 읽기와 쓰기에서 일괄처리(일반적으로 노출 버퍼)할 수 있는 더 효율적으로 처리(자주적으로 결과의 적은 시스템호출).네트워크 레이어와 하드웨어 네트워크 사용자가 자신의 형태의 버퍼가 있습니다.

실제로는 기록된 데이터에서 쓰()을 것입니다 실제로 기록하기 전에 더 읽()성공적으로 완료되면:는 경우에도 데이터가 러시는 하나의 층에 그것이 의미하지는 않습 그것은 러시에 다른 그리고 절대적으로 보장하는 데이터는 그것의 방법을 통해 다시 클라이언트.이를 위해서는 높은 수준 프로토콜이다.

이 echo 를 들어 데이터는 단순히 밀을 통해 한 빨리 그것이 될 수 있습니다.모두 쓰고 읽는 것이 블록에 따라 근본적인 네트워크 스택(송신 및 수신 버퍼에 특정),각각 자신의 시리즈의 버퍼가 있습니다.

[이 일을 단순화하고의 비트 코스--하나는 항상 봐 TCP[protocol]자체가 부과 전송 특성에의 실제 패킷 흐름입니다.]

다른 팁

TCP 연결은 교 full duplex.그래서 당신과 함께 다루고 있는 2 개의 채널 및 예,양쪽 모두 쓸 수 있에서 동일한 시간입니다.

당신은 맞는 기술적으로 수행할 때 Read()가동,당신은하지 않은 읽기 비트 떨어져 있습니다.당신은 기본적으로 읽기 데이터를 버퍼(덩어리가 받은 TCP 및 배열에 올바른 순서).을 보낼 때 수 있습 Flush()해야 하는 이론에서 데이터를 전송해야 합니다.는 즉시,그러나 현대의 TCP 스택 비트의 논리가 어떻게 데이터를 수집하에서 적절한 크기 패킷과 버스들이 있습니다.

로 헹크 Holterman 설명,TCP 이 전중 프로토콜(면 의해 지원되는 모든 기본 인프라),그래서 전송 및 수신 데이터의 더 많은 경우 서버/클라이언트 데이터를 읽고 쓰.그것은 좋아하지 않을 때 당신은 서버에 데이터를 보내고,클라이언트를 읽습니다.클라이언트가 보내는 그것의 자신의 데이터를 Read()이 경우에는 데이터는 편에서는 네트워크 버퍼 더 이상 및 삭제 될 수 있습니다 몇 시간 후에 그것은 아무도 그것을 읽고 싶어.적어도 나는 이것을 경험할 때 다루는 내 supa dupa 서버/클라이언트 라이브러리(-.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top