TCP-сокет «сервер» читает дважды, ввод отправляется один разC++

Программы на C++. Форум разработчиков
Ответить
Гость
 TCP-сокет «сервер» читает дважды, ввод отправляется один раз

Сообщение Гость »


Я пытаюсь создать очень эффективный интерфейс для старой 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
now the data seem clean but it is still reading twice the number '1' and the number '2' and only once the number '0' so the number 0 is handled correctly, however I am not understanding why!
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»