通过 WinSock2 API 的单次调用"recv()"函数调用获取全部接收字节



我在android设备上使用蓝牙android api编写了一个客户端应用程序,在windows pc上使用winSock2 api编写了一个服务器端应用程序。现在我的问题是recv()在一次调用中不能接收超过1011字节。这里是发送和接收方法的代码-

Android数据发送代码如下:

byte[] testByte = new byte[1024];
outputStream.write(testByte );

Windows接收代码是

char response[4096];
//acceptedSocket: client socket accepted by server
//protocol- BTHPROTO_RFCOMM
//SocketType - SOCK_STREAM;
receivedBytes = recv(acceptedSocket, response, sizeof(response), 0);

here receiveBytes = 1011。所以我必须再次调用recv()来接收接下来的13个字节。

现在,如果我改变recv()函数调用标志MSG_WAITALL和响应数组的大小为1024,那么它返回receivedBytes = 1024字节,我可以在一次调用中接收整个1024字节。

在这种情况下,我必须首先从客户端应用程序,然后必须发送数据。所以我需要传送两次from Android client app.

但是我想在recv()的单次调用中接收整个1024字节,并从Android客户端PP传输一次;

我怎样才能做到这一点?

你不能。

recv()不指定一次传输超过一个字节。

最新更新