Я пытаюсь написать программу, в которой я набираю команду на одном Пи, а затем она отправляется другому Пи.Я хочу, чтобы две похожие программы работали параллельно.С помощью приведенного ниже кода я могу заставить Pis подключиться и отправить 1 команду, они оба выполняются и возвращаются в раздел, где я могу отправить команду, но клиент зависает там, в разделе sleep_for (1s).Я относительно новичок в использовании связи, поэтому любая помощь приветствуется.
Большая часть того, что я пробовал, касалась перемещения части кода, которая устанавливает соединение, из цикла while.Но, как я уже сказал, я не знаком с тем, как работает этот тип общения, поэтому я сосредоточился на том, чтобы попытаться понять его больше.
Клиент
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 occured\n");
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 error\n");
}
}
if(n < 0){
printf("\n Read error \n");
}
Step = atoi(recvBuff);
cout << "Step = " << Step << "\n";
}
}
else if (Step == 2){
printf("2\n");
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("closed\n");
}
else if (Step == 2){
printf("2\n");
Step = 1;
}
else if (Step == 15){
return 0;
}
else{
Step = 1;
}
}
}
Я ожидаю вывод числа, которое я ввожу как шаг, 2, показывая, что код прошелна правильный шаг, основанный на вводе, и я получаю это с первой попытки, но после этого первого ввода код зависает.