关于如何构造socket消息体 服务器和客户端发送和接收消息,由于命令比较多,所以得区分一下。想用一个结构体定义消息struct message{ int type; char data[];}由于这个数据大小不确定,所以不知道如何定义呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我有个好的建议,你说的其实就是通信协议的问题,我给你一个方法,是大部分软件都采用的一种方法typedef struct head{ unsigned char protrol; //通信协议编号,自己定义,自己遵行。可以用宏定义做出来。 unsigned int size; //后面接着的数据包的大小加1; unsigned char opcode; //这个消息是用来做什么操作的宏定义。}发的时候一起发,我就不用说了。接的时候,先接收6个字节,因为包头的长是定长。收了之后判断协议是不是你要的包,不是扔掉。然后接着看大小,为0即后面没有数据,不为零,你就接受size个字节,这就是你要传的数据,其格式你用一个结构体定义好,这个数据结构你自己清楚,你自己知道怎么解。然后判断opcode是让你干什么,比如关闭该连接(这中情况可以不传数据),打印消息(即数据),还是客户端信息(即数据)。emule和BT都是这么干的,肯定行 typedef struct mess1{ UINT messID; ...}mess1;// send:send(...,sizeof(mess1));//receive:recv(...,buf,4,0);if(*(UINT*)buf == mess1的ID值 ) recv(...,buf,sizeof(mess1)-4,...); 对,我说的就是这个意思,只不过大小你要填在包头的size里。 struct message{ int type; int length; char* pdata;} 先发这个头,再发这个pdata,length就是pdata长度 "char* pdata;" -- 别害人家. 你这个涉及到socket消息包的格式定义,自己去查一下资料。 struct message { int type; char data[1024]; } 数据过大的,比如传文件。另开连接 wininet API怎么设置代理??? 关于getprocessid的问题 一个韩国学生问我"中国有笔记本计算机没有?" 怎么在list control里填加整型变量 一道编程智力题!有兴趣的来看看! 清帮忙看看为什么会出错 菜鸟问题,用什么API函数为刚创建的线程建立一个消息队列? 请问:如何从mpeg文件中快速的找到某一帧。(高分) winsock2 compile error 自己编写的服务程序在系统注销后被退出 怎么在mainfram中获得文档指针? 困恼vc或C++builder????
typedef struct head
{
unsigned char protrol; //通信协议编号,自己定义,自己遵行。可以用宏定义做出来。
unsigned int size; //后面接着的数据包的大小加1;
unsigned char opcode; //这个消息是用来做什么操作的宏定义。
}
发的时候一起发,我就不用说了。
接的时候,先接收6个字节,因为包头的长是定长。收了之后判断协议是不是你要的包,不是扔掉。然后接着看大小,为0即后面没有数据,不为零,你就接受size个字节,这就是你要传的数据,其格式你用一个结构体定义好,这个数据结构你自己清楚,你自己知道怎么解。然后判断opcode是让你干什么,比如关闭该连接(这中情况可以不传数据),打印消息(即数据),还是客户端信息(即数据)。emule和BT都是这么干的,肯定行
{
UINT messID;
...}mess1;
// send:
send(...,sizeof(mess1));//receive:
recv(...,buf,4,0);
if(*(UINT*)buf == mess1的ID值 )
recv(...,buf,sizeof(mess1)-4,...);
{
int type;
int length;
char* pdata;
}
先发这个头,再发这个pdata,length就是pdata长度
"char* pdata;" -- 别害人家.
{
int type;
char data[1024];
} 数据过大的,比如传文件。另开连接