2016-08-14 7 views
-1

私はソケットストリームを使用して、サーバとクライアント間の接続にプロトコルTcpを使用します。 Extern IPアドレス。 私の問題は、クライアントから送信されたすべてのデータを受信して​​いないことです。 私は多くのソリューションをshearchしようとしたV、そして私はActual Dataを送った後Data Sizeファーストを送信するために持っていることを知った、それは私が例のためにしたものだけだった。C#ソケットストリーム、Tcpプロトコルを使用

string Data = ""; // my data here 
string Crypted = crypt(Data); // just a method crypting string (work perfectly tested) 
byte[] DataBytes = Encoding.Unicode.GetBytes(Crypted); 
_ClientSocket.Send(BitConverter.GetBytes(DataBytes.Length),0,4,0); 
_ClientSocket.Send(DataBytes,0,DataBytes.Length,0); 

そして、そのようなSomethign受信用:

byte[] uffer; 
      byte[] BufferData; 
      int Size; 
      int Received; 
      uffer = new byte[4]; 
      while (true) 
      { 
       uffer = new byte[4]; 
       Size = _Client.Receive(uffer, 0, 4, 0); 
       if (Size > 0) 
       { 
        if (Size < _Client.ReceiveBufferSize) 
        { 
         BufferData = new byte[Size]; 
        } 
        else 
        { 
         BufferData = new byte[_Client.ReceiveBufferSize]; 

        } 
        Received = _Client.Receive(BufferData, 0, BufferData.Length, 0); 
        string Msg = Encoding.Unicode.GetString(buffer); 
        String Data = U.Decrypt(Msg); 

       } 

しかし、私はまだデータを受け取りません。私はそれを受け取っていません。

+0

問題を実際に示すコードを使用するように質問を編集してください(つまり、完全で最小限の再作成です)。注1私は過去にこのアプローチを使用してきました。 2.通常の.NET命名規則を使用してください。[SO]構文の強調表示がうまく機能します(かなり単純です)。 – Richard

+0

4バイトの大きさを 'uffer'にすると、メッセージは' BufferData'に入りますが、コードスニペット以外では使用されない 'buffer'をデコードします。 –

+0

@リチャードthats私のコードは、発行されたコードです。 –

答えて

1

私は最初の受信の結果を受信した値と混合していると思います。後

Size = _Client.Receive(uffer, 0, 4, 0); 

SizeはそのAPI呼び出しが受信したバイト数になりますが、あなたはサイズにメインコンテンツのためのバッファを、それを使用している直後。

ufferの内容をintに変換し、それを使用して次の受信に使用するバッファのサイズを変更する必要があります。つまりあなたの不足している:

int messageSize = BitConverter.ToInt32(uffer, 0); 
BufferData = new byte [Math.Min(messageSize, _Client.ReceiveBufferSize]; 
+0

ありがとうございました! 、しかし、私はまだすべての結果を得ていない私はforeachloopを持っているデータを送信するプロセスのForeachプロセスは、サーバーに送信されます4または5プロセスのように受信 –

+0

@CruDy両方のクライアントサーバー、および作業スルー。あなたが必要とするものではない小さなものは、必要な手がかりになる可能性があります。 [SO]では、質問に記入した情報だけに進むことができます。 – Richard

関連する問題