获取当前IP
QList< QHostAddress> addressList = QNetworkInterface:: allAddresses ( ) ;
QString IP = "" ;
for each ( QHostAddress address in addressList)
{
if ( address. protocol ( ) == QAbstractSocket:: IPv4Protocol && address != QHostAddress:: Null && address != QHostAddress:: LocalHost)
{
IP = address. toString ( ) ;
ui- > lineEdit_socketIP- > setText ( IP) ;
break ;
}
}
服务端
服务端开启监听
QTcpServer * m_tcpServer = new QTcpServer;
QString serverIP = ui- > lineEdit_socketIP- > text ( ) ;
int serverPort = ui- > lineEdit_portId- > text ( ) . toInt ( ) ;
bool flg = m_tcpServer- > listen ( QHostAddress ( serverIP) , serverPort) ;
新的客户端连接到达
connect ( m_tcpServer, SIGNAL ( newConnection ( ) ) , this , SLOT ( sls_tcpServerNewConnection ( ) ) ) ;
void ComNetTool:: sls_tcpServerNewConnection ( )
{
QTcpSocket * newSocket = m_tcpServer- > nextPendingConnection ( ) ;
connect ( newSocket, SIGNAL ( readyRead ( ) ) , this , SLOT ( sls_tcpServerRecvMsg ( ) ) ) ;
ui- > cbBox_socketInfo- > addItem ( newSocket- > peerAddress ( ) . toString ( ) + ":" + QString:: number ( newSocket- > peerPort ( ) ) ) ;
m_clientList. append ( newSocket) ;
}
服务端接收数据
void ComNetTool:: sls_tcpServerRecvMsg ( )
{
QTcpSocket * s = ( QTcpSocket * ) sender ( ) ;
QByteArray recvBuffer = s- > readAll ( ) ;
if ( ! recvBuffer. isEmpty ( ) )
{
ui- > textEdit_recText- > append ( QString ( "[网口:从%1:%2接收]\r\n" ) . arg ( s- > peerAddress ( ) . toString ( ) ) . arg ( s- > peerPort ( ) ) + QString:: fromLocal8Bit ( recvBuffer) ) ;
}
}
服务端发送数据
int socketIndex = ui- > cbBox_socketInfo- > currentIndex ( ) ;
if ( 0 == socketIndex)
{
for each ( QTcpSocket * s in m_clientList)
{
s- > write ( data) ;
}
}
else
{
m_clientList. at ( socketIndex - 1 ) - > write ( data) ;
}
客户端
连接到服务端
QTcpSocket * m_tcpSocket = new QTcpSocket;
QString serverIP = ui- > lineEdit_socketIP- > text ( ) ;
int serverPort = ui- > lineEdit_portId- > text ( ) . toInt ( ) ;
m_tcpSocket- > abort ( ) ;
m_tcpSocket- > connectToHost ( serverIP, serverPort) ;
bool bRet = m_tcpSocket- > waitForConnected ( 1000 ) ;
if ( ! bRet)
{
}
else
{
ui- > cbBox_socketInfo- > addItem ( m_tcpSocket- > localAddress ( ) . toString ( ) + ":" + QString:: number ( m_tcpSocket- > localPort ( ) ) ) ;
}
客户端接收数据
connect ( m_tcpSocket, SIGNAL ( readyRead ( ) ) , this , SLOT ( sls_tcpSocketRecvMsg ( ) ) ) ;
void ComNetTool:: sls_tcpSocketRecvMsg ( )
{
QByteArray recvBuffer = m_tcpSocket- > readAll ( ) ;
if ( ! recvBuffer. isEmpty ( ) )
{
ui- > textEdit_recText- > append ( QString:: fromLocal8Bit ( recvBuffer) ) ;
}
}
客户端发送数据
QByteArray sendData = ui- > textEdit_send- > toPlainText ( ) . toLocal8Bit ( ) ;
m_tcpSocket- > write ( sendData) ;