C++结构体详解
原文链接:https://blog.csdn.net/qq_51534890/article/details/118637720
#include<iostream>
#include<string.hs>
using namespace std;
//结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
}stu3; //结构体变量创建方式3
int main()
{
//结构体变量创建方式1
struct student stu1;//struct 关键字可以省略不写
stu1.name = "张三";
stu1.age = 18;
stu1.score = 100;
cout << "姓名:" << stu1.name << " 年龄: " << stu1.age << " 分数: " << stu1.score << endl;
//结构体变量创建方式2
struct student stu2 = { "李四",19,60 };
cout << "姓名:" << stu2.name << " 年龄: " << stu2.age << " 分数: " << stu2.score << endl;
stu3.name = "王五";
stu3.age = 18;
stu3.score = 80;
cout << "姓名:" << stu3.name << " 年龄: " << stu3.age << " 分数:" << stu3.score << endl;
system("pause");
return 0;
}
好像少一个变量也能用。
//结构体变量创建方式2
struct student stu2 = { "李四",19,60 };
cout << "姓名:" << stu2.name << " 年龄: " << stu2.age << " 分数: " << stu2.score << endl;
使用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;
}