我在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()
不指定一次传输超过一个字节。