我现在做一个项目,用donet写一端通信程序,而另一端则是用vc写的程序
vc那一端的代码形式如下:
void StartBilling()
{
char szPacket[256];
int nPacketNum = 6;
int nSize = 0; memset( &szPacket, 0, 256 );
memcpy( &szPacket[0], &nPacketNum, sizeof( int ) );
nSize += sizeof( int );
memcpy( &szPacket[nSize], &g_ServerNum, sizeof( int ) );
nSize += sizeof( int );

send( g_BillSocket, szPacket, nSize, 0 );
}
而我以前在dotnet写的程序,
int intByteCount =clientSocket.Receive(bytReceive);
strDataReceive= Encoding.UTF8.GetString(bytReceive,0,intByteCount);
可是这样并不能解析出那边发过来的信息字段应该如何解析出里面的字段信息:而发送的信息也和那边的信息类似的格式呢?小弟这个问题非常棘手,请高手指教拉

解决方案 »

  1.   

    Byte也是单字节啊,接收到的信息是正确的,我调试时候对比了,是正确的
    但是不知道怎么把这些有效的信息给解析出来
      

  2.   

    怎么跟我以前做的一个程序一样,客户端是vc的,服务器端是c#
      

  3.   

    我用VC写过也用DONET写过,不过都是VC跟VC(直接用CHAR),DONET跟DONET(用BYTE流)
    你这样的倒是没见过,帮你顶一下~ 
    关注
      

  4.   

    我这边是通过流操作的,但我看你现在的问题是不知道如何解析得到的bytes。我想你是缺少一套通信命令机制,所以无法解析。你可以先定义出一套通信命令,比如
    连接号(8位)+命令类型{4位}+信息长度{8位}+信息  
    注:位数我随便定的,你可自己再加考虑,连接号是用来区分多个客户端,命令类型用来处理不同的信息和响应等等。
    两边都遵循规则,这样一旦建立连接后,可以连续不断的进行通信。数据也不会混淆。
      

  5.   

    另外我觉得使用BinaryReader会方便一些,它提供多种Read方法
    NetworkStream stream = null;
    stream = new NetworkStream(clientSocket);
    BinaryReader reader = new BinaryReader(stream);
      

  6.   

    他定义的规则,就是用上面的VC方式传输
    har szPacket[128];
    memset( &szPacket, 0, 128 );
    int nSize = 0;memcpy( &szPacket, &nPacketNumber, sizeof( int ) );
    nSize += sizeof( int );
    memcpy( &szPacket[nSize], &szUID, strlen( szUID ) );
    nSize += 50;
    memcpy( &szPacket[nSize], &szMac, strlen( szMac ) );
    nSize += 32;
    memcpy( &szPacket[nSize], &szIP, strlen( szIP ) );
    nSize += 20;
    memcpy( &szPacket[nSize], &nServerNumber, sizeof( int ) );
    nSize += sizeof( int );
    memcpy( &szPacket[nSize], &nState, sizeof( int ) );
    nSize += sizeof( int );
    memcpy( &szPacket[nSize], &nValue, sizeof( int ) );send( nSock, szPacket, nSize, 0 );所有 Packet 使用 上述Packet 构造. 不使用的值初始化成0.这个是一个韩国人写的通信程序,他发给我,叫我按照他的方式去做
      

  7.   

    一次通信中读取128位?然后依次读sizeof( int )长度的PackerNumber,再读50位的UID...但我看最终发送的nSize又没有128位,每次通信到底读取多少位才算一次通信完成?然后其余的算下一次通信?还是连接一次只发一次数据?int intByteCount =clientSocket.Receive(bytReceive);
    strDataReceive= Encoding.UTF8.GetString(bytReceive,0,intByteCount);
    这样肯定是乱码,c端怎么发的,s端也得进行相应的解读。
      

  8.   

    有趣了,我做的也是客户端VC,服务器端C#,猴子海风加我QQ
    24456406
    Msn : [email protected]
    多多交流
      

  9.   

    我发现一个严重的错误哈
    int intByteCount =clientSocket.Receive(bytReceive);
    strDataReceive= Encoding.UTF8.GetString(bytReceive,0,intByteCount);
    怎么可以这样,应该循环读才对啊,不能转换成GetString,不过我想看看你其他部分的Socket的实现方法,我想用的是异步的Socket