c++ socket 结构体
使用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
- 点赞
- 收藏
- 关注作者
评论(0)