您的位置:程序门 -> vc/mfc -> 网络编程



winsocket如何以包的形式发送数据,


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


winsocket如何以包的形式发送数据,[已结贴,结贴人:csl435]
发表于:2007-03-07 16:53:23 楼主
winsocket如何以包的形式发送数据,接收端如何保证接收到正确数据,向高手请教。
最好有例程谢谢。。。。。。
发表于:2007-04-08 21:32:361楼 得分:0
路过一顶
发表于:2007-04-09 08:45:272楼 得分:0
如果要保证数据正确,自己加上包头,包尾和校验和
发表于:2007-04-09 09:02:073楼 得分:0
参考tftp?
发表于:2007-04-09 09:23:074楼 得分:5
定义个数据包结构     这样可以保证接收完全~~
发表于:2007-04-09 15:34:025楼 得分:0
要自己处理封包,拆包,组包
发表于:2007-04-09 15:57:556楼 得分:5
自己定义个结构体(data_info)来封装数据
发送时,一整个结构地发送:
send(socket,&data_info,   sizeof(data_info))
接收端时,整个结构地接收:
data_info   e;
recv(socket,&e,   sizeof(data_info))

之后就像平时用结构一样直接读取数据出来  
用tcp传输是基本保证数据正确性的
发表于:2007-04-10 00:06:457楼 得分:10
一般的做法是定义一个包头,一个包体,
包头一般如下
struct   head
{
    int   type;//包类型   比如1为注册。2为注销等等   自定义的
    int   bodylen;包体长度
    下面可以自己根据需要扩充
    ....
};
包体怎么定义都行了(不用的业务功能可以不同)
比如
struct   body1
{
    int   test;
    char   buffer[100];
};

struct   body2
{

      char   buffer2[200];
      long   test;
};

发送的时候可以先发包头再发包体


head   head1;
head1.type   =   1;
head1.bodylen   =sizeof(body1);
send(socket,&head1,   sizeof(head));
body1   body1;
memset(&body1,0,sizeof(body1));
body1.test   =100;
strcpy(body1.buffer, 'dfsdfsd ',7);
send(socket,&body1,   sizeof(body1));

接受的时候要先收包头然后根据包头里面的长度字段来决定要接受多长的包体




快速检索

最新资讯
热门点击