c++ - 关于在 symbian 中使用 TCP/IP 写入

标签 c++ symbian

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 中的纯文本?

最佳答案

TDes8 只是字节,如果 Java 端试图读取 ASCII,这很好,如果 Java 端期望 16 位 unicode(这是 Java 的 char 是什么),则不太好。但是,如果您正在读取另一端的套接字,那么即使它不兼容,您仍然会看到一些数据,只是不是您所期望的。与服务器通信的协议(protocol)应该指定字符集,而不管服务器是用什么语言实现的。

否则:

  • 它可以在模拟器上运行吗?
  • 您检查过 iStatus 是否有错误吗?通常,如果套接字连接,您可以写入它,但您永远不知道。
  • 服务器是否报告套接字已连接?您可能连接到了错误的主机或错误的端口。
  • 如果服务器确实读取了一些数据,但由于某种原因失败了,你知道吗?我想我是在问你是否也在调试另一端。如果不是,则可能是您的数据格式不正确,并且在另一端被忽略了。我想你要发送 6146A<?xml version="1.0"?><AM><P/><A><CE/></A></AM> .一些跟踪和/或数据包嗅探会告诉您这是否属实。
  • 以“a”开头的变量通常是一个参数:这是您的真实代码吗?如果不是,那么有关格式错误的数据的问题适用,并且您的调用者可能给您错误的信息。
  • 您可能希望在返回之前 PopAndDestroy aQuery,尽管这不会影响此问题。
  • 您的函数应该称为 WriteSocketL,因为它可以离开。

关于c++ - 关于在 symbian 中使用 TCP/IP 写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/919671/

相关文章:

c++ - "DSO missing from command line"while cross compiling mosquitto example

c++ - 在 Visual Studio C++ 2008 win32 运行时问题中调试与发布构建

iphone - 开始电话应用程序开发

qt - 如何在Qt中自定义 ListView

c++ - 将 3 个独立的字节数组组合成一个字节数组

c++ - OpenGL:标准化世界协调

c++ - BYTE 作为未声明的标识符,即使我包含了 windows.h

c++ - Qt C++ 析构函数需要很长时间才能返回

c++ - Symbian C++ STOMP 库

javascript - 使用 Javascript 或 CSS 检测 Symbian OS 设备