【发布时间】:2015-04-07 16:03:51
【问题描述】:
问题
我正在尝试从 C++ 服务器向我的 Android 客户端发送数据包,但 Android 客户端从未收到数据包。我在 android 上尝试了不同的 readline 和 read 缓冲区,但它们从不返回任何东西。我也在调用方法从主活动页面接收数据包。
C++ 代码
int numBytes; // the number of bytes sent
// Sends the message to the connected host
try
{
string sendMsg = "This is a test \r\n";
if (numBytes = send(socketId, sendMsg.c_str(), sendMsg.size(), 0) == -1)
{
int errorCode = 0;
string errorMsg = "error calling send():\n";
detectErrorSend(&errorCode,errorMsg);
CExceptionEx socketSendException(errorCode,errorMsg);
throw socketSendException;
}
}
catch(CExceptionEx& excp)
{
excp.response();
exit(1);
}
return numBytes;
安卓代码
public void RecievePacket()
{
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(mSock.getInputStream()));
String test = br.readLine();
/* BufferedInputStream input = new BufferedInputStream(mSock.getInputStream());
byte[] buffer = new byte[10]; // 10 bytes buffer
int bytesRead = 0;
while( (bytesRead=input.read(buffer)) !=-1 ) { // read up to 10 bytes
String str = new String(buffer,0,bytesRead); // convert bytes to String using default encoding
//System.out.println("Data received: " + str);
}
*/
}
catch (Exception ex)
{
}
}
注意
注释的代码块是我尝试接收消息的另一种方式,还请注意,我能够将数据包从 Android 发送到 C++。
编辑
send() 正在发送 0 个字节,但我能够从 android 接收数据包,因此必须有一个连接。
【问题讨论】:
-
您使用的是
"\r \n",它们之间有一个空格。我不认为这是导致任何问题的原因,但这可能不是您想要做的。 -
另外,
send()返回发送的字节数,或者-1出错。打印出返回值可能会很有用,这样您就可以查看它是否真的发送了所有内容。 -
您是否验证过 C++ 服务器可以从 android 设备访问?我建议使用某种 ping 工具。
-
我能够从 Android 客户端连接并发送消息,并且它们正在被 C++ 服务器接收,所以我认为它是可以访问的。
-
在您的 C++ 代码中,
socketID不是您的服务器套接字,是吗?