2010-12-20 8 views
1

.NETでクライアントサーバーアプリケーションを作成していますが、今では何かを送信しようとする問題が発生しています。クライアントは読み取り中です。それ以外の場合は、送信されたデータを駄目にします。TCPサーバーの送信速度が速すぎる

例:私はテスト

  • クライアントは、私がENDTEST
  • クライアントはテスト@ $> EST
  • @読み込み送る

  • の読み取りを開始送る

    1. は、解決する方法はありますこの?今私は送信後にThread.Sleep(10)をやっていますが、より良い方法があると思います:P。

      P.S.私はNetworkStream.BeginWrite()/BeginRead()ではなくNetworkStream.Write()/Read()を使用しています。どちらの方が優れているのですか?

  • +2

    使用している文字エンコードは何ですか?サーバーとクライアントのコードを貼り付けることはできますか? – cdhowie

    +2

    データがすぐに送信されているため、クライアントに不正なデータが表示されることはありません。私は問題がタイミングではないと思うが、あなたのコード内に何か他のものがあると思う。私たちは*コードを見ないと手助けすることはできません。 –

    +2

    クライアント/サーバーでのデータの送受信には何を使用していますか?あなたはウェブサービスを使っていますか?あなたの問題を理解できるようにいくつかのコードを投稿してください。 –

    答えて

    0

    特に、両端(クライアント/サーバー)がC#にある場合は、nettcpbindingでWCFを使用して調べる必要があります。

    以前はカスタムのtcpコードを書くのと同じような問題がありましたが、wcfに移行して、はるかに簡単で安定したアプリケーションコードを書くことができました。

    1

    問題は、同じソケットを使用して複数の「もの」のデータを送信している可能性があります。文字列とイメージを送信したことを知っているかもしれませんが、TCPは個別のオブジェクトを表示せず、単一のバイトストリームしか表示しません。

    「最初の」データオブジェクトを取得するために必要な読み取り呼び出し数もわかりません。複数のオブジェクトを線引きすることは、TCPの範囲外です。つまり、この問題はトランザクションごとに1つのソケットを使用することで最も解決されます。ソケットを作成し、単一の書き込み呼び出しでデータ全体を書き込み、ソケットを閉じます。データ全体を取得するまで、クライアントに読み取らせてください。あなたが何か他のものを送る必要があれば、新しいソケットを作りなさい。

    これはNetworkStreamクラスに固有のものではありませんが、それが役に立ちそうです。

    0

    私があなたの場合は、データを送受信する際にルールを作成します。たとえば、$のような開始文字があり、*が終了文字であるとします。それはあなたのクライアント/サーバーシステムがいつ読んだり、いつ書くかを知るのを助け、最終的にそのプロセスでごみを避けます。手順の面でとても :

    • クライアントが*
    • Serverは$を見たときにリードを開始し、再度*

    後に停止し、多分コード例メッセージは、Hello Worldのを$送りますあなたがしていることは、あなたが間違っていることを正確に突き止めるのを助けることができます。

    関連する問題