void CSocket::WriteSocket()
{
TBuf8<2> KData (_L8("60"));
//RBuf8 KData;
RBuf8 aQuery;
aQuery.CleanupClosePushL();
aQuery.CreateL(100);
// <?xml version="1.0"?><AM><P/><A><CE/></A></AM>
_LIT8(KData1,"61");
//_LIT8(KData2,"20");
_LIT8(KData3,"A");
_LIT8(KData4,"<?xml version=\"1.0\"?><AM><P/><A><CE/></A></AM>");
TBuf8<100> buff,buff1;
buff.Copy(_L("<?xml version=\"1.0\"?><AM><P/><A><CE/></A></AM>"));
TInt len=buff.Length();
buff1.AppendNum(len);
aQuery.Append(KData1);
aQuery.Append(buff1);
// aQuery.Append(KData2);
aQuery.Append(KData3);
aQuery.Append(buff);
//iSocket.Send(KData,KExpeditedDataOpt,iStatus);
iSocket.Write((TDesC8)aQuery,iStatus);
User::WaitForRequest(iStatus);
}
我在Symbian上使用此代码与Java中的服务器进行通信。
但问题是:数据没有到达服务器。它显示设备已成功连接。我在这段代码中做错了什么? TDes8与Java中的纯文本兼容吗?
答案 0 :(得分:1)
TDes8只是字节,如果Java端试图读取ASCII,这很好,如果Java端期望16位unicode(这就是Java的char),那就没那么好了。但是如果你在另一端读取套接字,那么即使它不兼容,你仍然会看到一些数据,而不是你所期望的。您与服务器通信的协议应指定字符集,而不管服务器实现的语言是什么。
否则:
6146A<?xml version="1.0"?><AM><P/><A><CE/></A></AM>
。一些跟踪和/或数据包嗅探会告诉您这是否属实。答案 1 :(得分:1)
来自重复问题的交叉发布回复:
您的移动网络运营商可能阻止任何非HTTP流量。
您的服务器可能需要在返回所有数据之前接收更多数据。
我还特别关注你使用java字符/字符串,因为我希望服务器上的低级java套接字将传入的网络数据放在byte []中,而不是String。如果您的服务器使用类似于对readLine()方法的调用,则可能需要在客户端发送的数据中添加回车符。