通过单次调用WinSock2 Api

时间:2015-10-09 09:01:40

标签: android c++ bluetooth winsock winsock2

我使用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传输一次;

我怎样才能实现这个目标?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你不能。

recv()未指定一次传输多个字节。

你必须循环。