В сети есть 4 машины.
От 1й машины данные проходят через 2ю машину, со 2й машины одинаковые данные поступают на 3ю и 4ю машины.
передача на 2й машине:
socket = new QTcpSocket(this);
int writeDev::write(const QByteArray & pkg)
{
int written = 0;
written = socket->write(pkg, pkg.size());
}
прием на 3й и 4й машинах:
#define BUF_SIZE 10000
#define FRAME_SIZE 10000
clientsocket = new QTcpSocket(this);
tcpServer = new QTcpServer();
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnect()));
void MainWindow::newConnect()
{
clientsocket = tcpServer->nextPendingConnection();
connect(clientsocket, SIGNAL(readyRead()),
this, SLOT(recPkg()));
connect(clientsocket, SIGNAL(disconnected()),
clientsocket, SLOT(deleteLater()));
}
void MainWindow::recPkg()
{
int read_size = 0;
char rpkg[FRAME_SIZE];
read_size = clientsocket->read(rpkg, BUF_SIZE);
//обработка данных
}
Когда данные передаются в сети: 1-2-3 или 1-2-4 машины, то ошибок нет.
В сети 1-2-3-4 данные передаются нормально, но периодически или на 3й, или на 4й машине вылетает программа приема. При этом если на 3й программа вылетела, то на 4й работает нормально, если вылетела на 4й, то на 3й работает нормально.
В отладчике на машине, где вылетела программа, выдает в разных случаях такие ошибки:
1. QIODevice:: read called on a WriteOnly device
2. Program received signal SIGSEGV. Segmentation fault.
0x6900529f in ZN9QIODevice4readEPcx from C:\Windows\system32\QtCore4.dll
Готов отблагодарить финансово за ответ, который полностью поможет решить проблему.