在两个Raspberry Pis C 之间发送重复命令的方法
Method to send repeated command between two Raspberry Pis c++
我正在尝试编写一个程序,其中我在一个pi中键入命令,然后将其发送到另一个pi。我想并行两个类似的程序。有了下面的代码,我可以将pis连接起来,我可以发送1个命令,它们既执行并返回到可以发送命令的部分,但是客户端悬挂在Sleep_for(1s(部分。我对使用通信是相对较新的,因此对任何帮助表示赞赏。
我尝试过的大部分内容都涉及将建立连接从WARE循环中建立连接的代码的一部分移动。但是,正如我所说,我不熟悉这种类型的沟通方式,所以我一直专注于尝试更多地了解它。
客户端
int main () {
time_t start_time = 0;
time_t now_time = 0;
int loop = 1;
int Step = 1;
int sockfd = 0, n = 0;
char recvBuff[1024];
struct sockaddr_in serv_addr;
memset(recvBuff, '0',sizeof(recvBuff));
sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(5000);
if(inet_pton(AF_INET, "169.254.220.0", &serv_addr.sin_addr)<=0){
printf("n inet_pton error occuredn");
return 1;
}
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0){
printf("n Error : Connect Failed n");
return 1;
}
while (loop == 1){
if(Step == 1){
sleep_for(1s);
while(Step == 10){
printf("Listening");
while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0){
recvBuff[n] = 0;
if(fputs(recvBuff, stdout) == EOF){
printf("n Error : Fputs errorn");
}
}
if(n < 0){
printf("n Read error n");
}
Step = atoi(recvBuff);
cout << "Step = " << Step << "n";
}
}
else if (Step == 2){
printf("2n");
Step = 1;
}
else if (Step == 15){
return 0;
}
else{
Step = 1;
}
}
}
服务器
int main () {
time_t start_time = 0;
time_t now_time = 0;
int loop = 1;
int Step = 1;
int listenfd = 0, connfd = 0;
struct sockaddr_in serv_addr;
char sendBuff[1025];
printf("Here's johnny");
cout << "nStep A: " << Step << "n";
listenfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof(serv_addr));
memset(sendBuff, '0', sizeof(sendBuff));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(5000);
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(listenfd, 10);
while (loop == 1){
if(Step == 1){
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
cout << "Step ? ";
cin >> Step;
cout << "n Step B: " << Step << "n";
snprintf(sendBuff, sizeof(sendBuff), "%d", Step);
write(connfd, sendBuff, strlen(sendBuff));
close(connfd);
printf("closedn");
}
else if (Step == 2){
printf("2n");
Step = 1;
}
else if (Step == 15){
return 0;
}
else{
Step = 1;
}
}
}
我期望我输入的数字输出2,2,向我表明代码是基于输入的正确步骤,我在第一次尝试时得到了这一点,但是在第一个输入之后代码自身悬挂。
if(Step == 1){
sleep_for(1s);
while(Step == 10){
我们仅在Step
为1时才通过if
。但是,如果Step
为10,我们仅输入while
循环,因为它必须是1,否则我们将不一定是while
。因此while
循环内的代码将不会执行。
while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0){
recvBuff[n] = 0;
if(fputs(recvBuff, stdout) == EOF){
printf("n Error : Fputs errorn");
}
}
这被打破了。while
循环的每次迭代都覆盖了先前接收的字节。如果发送的消息为" 10",而第一个read
获取" 1",则获得" 0"的第二读将覆盖" 1",而atoi
调用将获得0而不是10!
相关文章:
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
- 在 c++ 中从执行的 shell 命令获取返回状态的安全方法是什么?
- 在两个Raspberry Pis C 之间发送重复命令的方法
- boost::P rogram_options 一种判断值是从命令行还是 ini 文件的方法?
- 有什么方法可以在C++中读取文本并执行这样的代码命令吗?
- 在 pthread 中运行 shell 命令的良好和优化方法是什么?
- 有没有一种简单的方法可以将系统命令的输出转换为字符串
- 在命令行程序中使用布尔值。找不到定义标志并检查它们是否在参数中的方法
- 在执行 Linux 命令之前了解它是否存在的方法
- 用c++测量APDU命令到Java卡的时间的最佳方法
- GNUMake:使用不同命令同时使用C/C++目标的更好方法
- 使用提升程序选项处理 2 级命令的最佳方法
- C++11:使用中央命令映射器调用虚拟基类方法
- 在 C++ 中将命令行参数作为函数调用的简单方法
- 有没有C++方法来调用 linux shell 命令
- 在C++中,有没有一种简单的方法可以通过iostream::cin获取带有参数的命令调用
- C++ System() 的替代方法,用于启动多个命令提示符.威纳皮 ( 无 MFC ).
- 命令在调用方法时终止
- 用c++编写命令行接口的更好方法是什么