QtでのTCP通信
TCP通信のQt実現大まかな流れ
QtのSocket通信は.Proエンジニアリングファイルに追加:
サービス側(Server)
QTcpServerとQTcpSocketの2つのQtクラスを使用するには
1、QTcpServerオブジェクトの新規作成
2、傍受するクライアントポートの設定
3、接続信号とスロットを関連付ける(クライアントがサーバーを接続する時、信号QTcpServer::newConnection()をトリガする)
4.スロット関数において、クライアントアクセスを1つのQTcpSocketオブジェクトで受ける(nextPendingConnection()
5.関連読取信号とスロット(socket受信バッファに新しいデータが来るとreadRead()信号を出す)
6.スロット関数でread()関数でデータを取得する
7、write()関数でクライアントにデータを送る
8、リスニングを取り消す
クライアント(client)
クライアントのコードはサーバより少し簡単で、QTcpSocketを使います
1、QTcpSocketソケットオブジェクトの作成
2、接続サーバー(connectToHost(IP,port))
3、write()関数を使ってサーバーにデータを送る
4、関連読取信号とスロット(socket受信バッファに新しいデータが来るとreadRead()信号を出す)
5、サーバーとの接続を切断する(close()とdisconnectFromHost()の違いについては、F 1でヘルプを見ることができます)
QtのSocket通信は.Proエンジニアリングファイルに追加:
QT += network
サービス側(Server)
QTcpServerとQTcpSocketの2つのQtクラスを使用するには
1、QTcpServerオブジェクトの新規作成
2、傍受するクライアントポートの設定
3、接続信号とスロットを関連付ける(クライアントがサーバーを接続する時、信号QTcpServer::newConnection()をトリガする)
4.スロット関数において、クライアントアクセスを1つのQTcpSocketオブジェクトで受ける(nextPendingConnection()
5.関連読取信号とスロット(socket受信バッファに新しいデータが来るとreadRead()信号を出す)
6.スロット関数でread()関数でデータを取得する
7、write()関数でクライアントにデータを送る
8、リスニングを取り消す
//1、 QTcpServer
// , ,
tcpServer = new QTcpServer(this);
//2、
tcpServer->listen(QHostAddress::Any, (int)port)
//3、
connect(tcpServer, &QTcpServer::newConnection, this, &MainWindow::server_New_Connect);
void server_New_Connect()
{
//4、 , QTcpSocket ,
socket = tcpServer->nextPendingConnection();
//5、 QTcpSocket ,
connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
connect(socket, &QTcpSocket::disconnected, this, &MainWindow::socket_Disconnected);
}
//6、 , read()
void socket_Read_Data()
{
// ( , )
char buffer[1024] = {0};
socket->read(buffer, 1024);
if( strlen(buffer) > 0)
{
QString showNsg = buffer;
ui->m_recvDataTextEdit->append(showNsg);
}
}
//7、 write( )
char sendMsgChar[1024];
socket->write(sendMsgChar, strlen(sendMsgChar));
//8、
tcpServer->close();
クライアント(client)
クライアントのコードはサーバより少し簡単で、QTcpSocketを使います
1、QTcpSocketソケットオブジェクトの作成
2、接続サーバー(connectToHost(IP,port))
3、write()関数を使ってサーバーにデータを送る
4、関連読取信号とスロット(socket受信バッファに新しいデータが来るとreadRead()信号を出す)
5、サーバーとの接続を切断する(close()とdisconnectFromHost()の違いについては、F 1でヘルプを見ることができます)
//1、 QTcpSocket
socket = new QTcpSocket();
//2、 (connectToHost(IP, port))
socket->connectToHost(IP, port);
//3、 write( )
socket->write(data);
//4、 ( socket , readRead() )
connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
void MainWindow::socket_Read_Data()
{
QByteArray buffer;
//
buffer = socket->readAll();
}
//5、 ( close() disconnectFromHost() , F1 )
socket->disconnectFromHost();