0

C# で Tcp クライアントを作成し、C++ で Tcp サーバーを作成します。TCP サーバー側では、ループによってデータを受信しました。

unsigned char* buffer = new unsigned char[BUFFERSIZE];
   int pLen =0;
   int recievedLen = 0;
   do{
          recievedLen = OnReadData(0, clientSock,buffer,&pLen,1000);
          printBytes(buffer,recievedLen);
   }while(recievedLen>0);

TCP クライアント側で、いくつかのデータを送信し、応答を受け取ります。

   private void Send(string data)
    {
        NetworkStream stream = tcpClient.GetStream();
        byte[] writeBuffer = Encoding.ASCII.GetBytes(data);
        stream.Write(writeBuffer, 0, writeBuffer.Length);
        Console.WriteLine("写入数据:" + Encoding.ASCII.GetString(writeBuffer));
    }

    private void Receive()
    {
        NetworkStream stream = tcpClient.GetStream();
        var readBuffer = new byte[2048];
        while (!stream.DataAvailable)
        {
            Thread.Sleep(1);
        }

        int writeCount = stream.Read(readBuffer, 0, readBuffer.Length);
        String content = Encoding.ASCII.GetString(readBuffer, 0, writeCount);
        Console.WriteLine("读取数据:" + content);
    }

Q: TCP クライアント側で受信データを呼び出さずに、データ送信のみを行うと、TCP サーバー側でデータを受信するためのループが正常に終了します。ただし、送信関数を呼び出してから TCP クライアント側で受信関数を呼び出すと、TCP サーバー側のrecv関数は 2 回目にブロックされます (期待される結果は 0 バイトの受信です)。誰でも説明できますか?どうも

4

0 に答える 0