c++ socket 结构体
【摘要】
使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿):
a. 结构体
b. Json序列化
c. 类对象
d. protobuf
下面逐一整理一下,方便以后进行项目开发。
1. 使用结构体
假设需要传送的结构体如下:
1 2 3 4 5 6 struct person...
使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿):
a. 结构体
b. Json序列化
c. 类对象
d. protobuf
下面逐一整理一下,方便以后进行项目开发。
1. 使用结构体
假设需要传送的结构体如下:
1 2 3 4 5 6 |
|
可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。
发送方代码:
1 2 3 4 5 6 7 8 9 10 |
|
或者
1 2 3 4 5 6 |
|
接收方代码:
同样需要定义字符串和相同的结构体对象
1 2 3 4 5 6 7 8 |
|
2. 使用Json序列化
有时间写
3. 使用类对象
有时间写
4. protobuf
设置缓冲区的长度和结构体长度保持一致,否则收的数据可能不对。
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(port);
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
int nRecvBuf = 1516;//设置为32K
int nSendBuf = 0;//设置为32K
setsockopt(sockClient, SOL_SOCKET, SO_RCVBUF, (const char*)&nRecvBuf, sizeof(int));
setsockopt(sockClient, SOL_SOCKET, SO_SNDBUF, (char *)&nSendBuf, sizeof(int));
inet_pton(AF_INET, ip, &addrSrv.sin_addr.s_addr);
if (connect(sockClient, (struct sockaddr*)&addrSrv, sizeof(addrSrv)) == -1)
return -2;
if (SOCKET_ERROR == sockClient) {
printf("Socket() error:%d", WSAGetLastError());
return -3;
}
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/89384108
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)