2010-12-20 2 views
1

. NET에서 클라이언트 - 서버 응용 프로그램을 만들고 있지만, 이제는 뭔가를 보내려고하는 문제가 있습니다. 클라이언트가 읽고 있고 뭔가를 보내는 중입니다. 그렇지 않으면 보낸 데이터를 허튼 소리로 만듭니다.TCP 서버가 .NET에서 너무 빠르게 전송합니다.

예 :

  1. 내가 해결하는 방법이 있나요 시험
  2. 클라이언트는
  3. 클라이언트는 추정

@ 테스트 @ $> 읽어

  • 내가 endtest 보내 읽기 시작 보내 이? 지금 나는 보낸 후 Thread.Sleep(10)을하고 있지만 더 좋은 방법이 있다고 생각한다 : P.

    P. NetworkStream.BeginWrite()/BeginRead()이 아니라 NetworkStream.Write()/Read()을 사용하고 있습니다. 이 두 가지는 어느 것이 더 낫고 왜 그럴까요? 당신은 양쪽 끝 (클라이언트/서버) C#에서 특히 경우 물건의 종류에 대한 nettcpbinding와 WCF를 사용하여 조사한다

  • +2

    어떤 문자 인코딩을 사용하고 있습니까? 서버와 클라이언트의 코드를 붙여 넣을 수 있습니까? – cdhowie

    +2

    데이터를 빠르게 전송하기 때문에 클라이언트가 잘못된 데이터를 보지 않아야합니다. 나는 문제가 타이밍에 있지 않다고 생각하지만, 당신의 코드에는 뭔가 다른 것이있다. 우리는 * 코드를 보지 않고도 도울 수 없을 것입니다. –

    +2

    클라이언트 - 서버에서 데이터를 보내고 받기 위해 무엇을 사용하고 있습니까? 웹 서비스를 사용하고 있습니까? 문제를 이해할 수 있도록 일부 코드를 게시하십시오. –

    답변

    0

    .

    내가 이전에 사용자 지정 TCP 코드를 작성 비슷한 문제를했지만, WCF와까지 이동은 당신이 당신의 응용 프로그램 코드를 작성에 집중할 수 있도록 훨씬 더 쉽게, 그리고 더 안정.

    1

    동일한 소켓을 사용하여 여러 "데이터"를 보내는 문제 일 수 있습니다. 문자열을 보낸 다음 이미지를 보냈지 만 TCP는 별도의 개체를 볼 수 없으며 단일 바이트 스트림 만 볼 수 있습니다.

    당신은 또한 당신의 "최초의"데이터 객체를 얻을 수 있도록해야합니다 호출 얼마나 많은 읽기 알 수 없다. 여러 객체를 묘사하는 것은 TCP의 범위를 벗어납니다. 요컨대,이 문제는 트랜잭션 당 하나의 단일 소켓을 사용하여 가장 잘 해결됩니다. 소켓을 작성하고 단일 쓰기 호출로 전체 데이터를 작성한 다음 소켓을 닫으십시오. 전체 데이터가있을 때까지 클라이언트에게 읽게하십시오. 다른 것을 보내야하는 경우 새 소켓을 만드십시오.

    이 항목은 NetworkStream 클래스에만 해당되는 것이 아니라 알고 있습니다.

    0

    내가 당신이라면 데이터를 보내고받을 때 규칙을 만들 것입니다. 예를 들어 $와 같은 시작 문자가 있고 *가 종료 문자라고 가정합니다. 이렇게하면 클라이언트/서버 시스템이 언제 읽어야하는지, 언제 쓰는지 알게되고 결국 프로세스에서 쓰레기가 발생하지 않게됩니다. 지금 단계의 측면에서 :

    • 클라이언트는 메시지가 다시 *
    • 서버는 $를보고하고 *

    후 정지 할 때 읽기 시작 어쩌면 코드 예제 안녕하세요 $ 세계 보냅니다 당신이하고있는 일은 우리가 정확히 무엇을 잘못하고 있는지 정확히 지적하는 데 도움이 될 수 있습니다.

    관련 문제