Я пытаюсь создать очень эффективный интерфейс для старой ERP (планирования ресурсов предприятия),
но заказчику он не очень нравится, потому что в нем отсутствует графический интерфейс,
Программное обеспечение создано на специальном языке, исходный код языка — C, поэтому я выбрал C и C++ для своего проекта. Графический интерфейс будет представлять собой приложение Qt, взаимодействующее с TCP-сервером, написанным на C, и я буду используйте это, чтобы обе среды взаимодействовали друг с другом.
проблема:
мой TCP-сервер дважды считывает данные из моего приложения Qt, даже если я отправлю его один раз, и там будут мусорные данные, например, если бы я отправил «1», сервер прочитал бы 1??:
вот мой код C для сервера:
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_CLIENTS 10
#define BUFFER_SIZE 256
int client_sockets[MAX_CLIENTS] = {0}; // Store client socket fds
pthread_mutex_t client_mutex = PTHREAD_MUTEX_INITIALIZER;
void error(const char *msg) {
perror(msg);
exit(1);
}
void broadcast_message(char *message, int sender_fd) {
pthread_mutex_lock(&client_mutex);
for (int i = 0; i < MAX_CLIENTS; i++) {
if (client_sockets[i] > 0 && client_sockets[i] != sender_fd) {
if (write(client_sockets[i], message, strlen(message)) < 0) {
perror("ERROR writing to socket");
}
}
}
pthread_mutex_unlock(&client_mutex);
}
int sanitizeData(char *data, int len) {
int j = 0; // Index for writing sanitized characters
for (int i = 0; i < len; ++i) {
if (data[i] >= '0' && data[i] sendData(&ez_gen_task);
}
но у меня все еще есть проблема с получением двойных данных!
данные получены как (это результат printf() из кода сервера C):
Код: Выделить всё
raw data recievd: 1
Received (sanitized data): 1
raw data recievd: 1
Received (sanitized data): 1
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 0
Received (sanitized data): 0
raw data recievd: 1
Received (sanitized data): 1
raw data recievd: 1
Received (sanitized data): 1
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 0
Received (sanitized data): 0
raw data recievd: 0
Received (sanitized data): 0
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 0
Received (sanitized data): 0
raw data recievd: 0
Received (sanitized data): 0
raw data recievd: 1
Received (sanitized data): 1
raw data recievd: 1
Received (sanitized data): 1
raw data recievd: 2
Received (sanitized data): 2
raw data recievd: 2
Received (sanitized data): 2
thank you for your help, and I apologized before hand if I am missing something stupid, which is almost always the case...
Lorenzo
Источник: https://stackoverflow.com/questions/781 ... -sent-once
Мобильная версия