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 バイトの受信です)。誰でも説明できますか?どうも