我现在做一个项目,用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);
可是这样并不能解析出那边发过来的信息字段应该如何解析出里面的字段信息:而发送的信息也和那边的信息类似的格式呢?小弟这个问题非常棘手,请高手指教拉
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);
可是这样并不能解析出那边发过来的信息字段应该如何解析出里面的字段信息:而发送的信息也和那边的信息类似的格式呢?小弟这个问题非常棘手,请高手指教拉
但是不知道怎么把这些有效的信息给解析出来
你这样的倒是没见过,帮你顶一下~
关注
连接号(8位)+命令类型{4位}+信息长度{8位}+信息
注:位数我随便定的,你可自己再加考虑,连接号是用来区分多个客户端,命令类型用来处理不同的信息和响应等等。
两边都遵循规则,这样一旦建立连接后,可以连续不断的进行通信。数据也不会混淆。
NetworkStream stream = null;
stream = new NetworkStream(clientSocket);
BinaryReader reader = new BinaryReader(stream);
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.这个是一个韩国人写的通信程序,他发给我,叫我按照他的方式去做
strDataReceive= Encoding.UTF8.GetString(bytReceive,0,intByteCount);
这样肯定是乱码,c端怎么发的,s端也得进行相应的解读。
24456406
Msn : [email protected]
多多交流
int intByteCount =clientSocket.Receive(bytReceive);
strDataReceive= Encoding.UTF8.GetString(bytReceive,0,intByteCount);
怎么可以这样,应该循环读才对啊,不能转换成GetString,不过我想看看你其他部分的Socket的实现方法,我想用的是异步的Socket