C++ SOCKET发送STRUCT结构体
来源:互联网 发布:阿哥阿妹-网络 编辑:程序博客网 时间:2024/05/20 11:32
要发送的结构体:
typedef struct Test
{
int aa;
char bb[100];
char cc[900];
}t_Test;
初始化要发送信息。对于字符串请用_snprintf方法
t_Test tt;
tt.aa=456;
_snprintf ( tt.bb, sizeof(tt.bb),
“Hello, ID Welcome to login” );
_snprintf ( tt.cc, sizeof(tt.cc),
“Adfadfasdfadfasdfadfasdfadfasd”);
发送信息
Sock.SendChunk(&tt,sizeof(t_Test),0);
————————————————————
服务器端:
int nRecvBytes = Receive ( szRecvBuffer, sizeof(szRecvBuffer) );
if (nRecvBytes>0)
{
t_Test tt;
memcpy(&tt,szRecvBuffer,nRecvBytes);
printf(“server收到数据aa=%d\nbb=%s\ncc=%s”,tt.aa,tt.bb,tt.cc);
}
需要注意的是这个方法发送的结构体大小一定不能超过你设定的缓存大小,超过了的话就会分成两次发送,到了服务器端就会出问题。比如缓存大小是1024B,结构体大小为1124B,服务器接收的时候会先收到1024B的信息,但是这个信息并不是完整的一个结构体,还有100B的内容将会在第二个包里面发送过来。到了服务器端需要组装,而照现在这种写法除非我们能在发送的时候智能标记让服务器端意识到内容大小超过1024,需要接收完后再组装结构体,不然就只有先发送一个包表示接下来的信息的类型和大小,服务器端收到信息后再进入组装处理程序分支。这个方法的极限缓存大小是1640B,再大就超过一个报文的大小了。
另外还有个很可行的方法,我还没实验过。
把struct串行化,就是变成二进制流,按位存储在char数组中,数组大小就是一个报文的缓存大小。数组的最后一位存放一个标记,表示后面还会有内容发送过来。这样服务器端接收信息直到接收到发送结束标记。最后把累计存下来的数据反串行化,就还原成了发送过来的struct了。 串行化我还能理解,反串行化我就没弄过了,不太懂
- C++ SOCKET发送STRUCT结构体
- 使用socket发送struct结构体内容
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- c/c++通过socket发送结构体
- C语言udp socket发送结构体
- python的socket发送C结构体
- struct socket结构体详解
- C++--------------------------结构体struct
- 结构体Struct(c#)
- C#struct结构体
- socket发送结构体
- (C/C++)struct结构体
- c/c++通过socket发送结构体以及类对象
- SOCKET SEND函数和RECV函数详解(转)
- TI C2000 compiler download link
- VECTOR 常用用法、存储、遍历访问
- RECV的超时总结
- C++线程同步 CCRITICALSECTION(临界区类)附自己写的测试代码
- C++ SOCKET发送STRUCT结构体
- 云计算——IBM smart Cloud
- StarUML---推荐一款UML工具(很好很强大)
- 在tomcat下部署工程
- LeetCode题解:Merge Sorted Array
- ZOJ 1240: IBM Minus One
- ZOJ 1295: Reverse Text
- LeetCode题解:Subsets I and II
- poj 3026 Borg Maze (bfs+prim)