我使用winSock2 api在windows pc中使用蓝牙android api和服务器应用程序在android设备中编写了一个客户端应用程序。现在我的问题是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);
这里receiveBytes = 1011.所以我必须再次调用recv()来接收下13个字节。
现在,如果我使用标志 MSG_WAITALL 更改recv()
函数调用并且响应数组大小为1024,那么它将返回 receivedBytes = 1024 字节,I一次调用就可以收到整个1024字节。
在这种情况下,我必须首先发送数据的大小 客户端应用程序,然后必须发送数据。所以我需要传输两次 来自Android客户端应用。
但我希望在recv()
的一次调用中接收整个1024字节并从Android客户端PP传输一次;
我怎样才能实现这个目标?
提前致谢。
答案 0 :(得分:1)
你不能。
recv()
未指定一次传输多个字节。
你必须循环。