1 Star 0 Fork 0

遇健/Linux

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
CalculatorClient.cc 2.50 KB
一键复制 编辑 原始数据 按行查看 历史
遇健 提交于 2023-07-27 22:15 +08:00 . 自定协议实现序列化和反序列化
#include"TcpClient.hpp"
#include"Protocol.hpp"
#include"Sock.hpp"
using namespace Protocol_ns;
static void usage(std::string proc)
{
std::cout << "Usage:\n\t" << proc << " serverip serverport\n"
<< std::endl;
}
enum
{
LEFT,
OPER,
RIGHT
};
// 10+20 ===> 把输入填充到Request中
Request Parseline(string&line)
{
string left,right;
char op;
int status=LEFT;
int i=0;
while(i<line.size())
{
switch(status)
{
case LEFT:
if(isdigit(line[i]))
left.push_back(line[i++]);
else
status=OPER;
break;
case OPER:
op=line[i++];
status=RIGHT;
break;
case RIGHT:
if(isdigit(line[i]))
right.push_back(line[i++]);
break;
}
}
Request req;
cout<<"left: " << left <<endl;
cout<<"rght: " << right <<endl;
cout<<"op: " << op <<endl;
req._x=stoi(left);
req._y=stoi(right);
req._op=op;
return req;
}
// tcpclient serverip serverport
int main(int argc,char*argv[])
{
if (argc != 3)
{
usage(argv[0]);
exit(USAGE_ERR);
}
string serverip=argv[1];
uint16_t serverport=atoi(argv[2]);
Sock sock;
sock.Socket();
int n=sock.Connect(serverip,serverport);
if(n!=0)
return 1;
string buffer;
while(true)
{
cout<<"Enter# "; // 12+9
string line;
getline(cin,line);
Request req=Parseline(line);
// cout<<"data1# ";
// cin>>req._x;
// cout<<"data2# ";
// cin>>req._y;
// cout<<"op# ";
// cin>>req._op;
std::cout << "test: " << req._x << req._op << req._y << std::endl;
// 1. 序列化
string Sendstring;
req.Serialize(&Sendstring);
// 2. 添加报头
Sendstring=AddHeader(Sendstring);
// 3. send
send(sock.Fd(),Sendstring.c_str(),Sendstring.size(),0);
// 4. 获取响应
string package;
int n=0;
START:
n=Readpackage(sock.Fd(),buffer,&package);
if(n==0)
goto START;
else if(n<0)
break;
else
{
}
// 5. 去掉报头
package=RemoveHeader(package,n);
// 6. 反序列化
Response resp;
resp.Deserialize(package);
cout<<"result: "<< resp._result <<"[code: "<<resp._code<< "]"<<endl;
}
sock.Close();
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/yu-jian-Rena/linux.git
git@gitee.com:yu-jian-Rena/linux.git
yu-jian-Rena
linux
Linux
master

搜索帮助