qt实现win socket通信
时间: 2023-10-25 22:09:10 浏览: 121
在Qt中,可以使用QTcpSocket和QTcpServer类来实现Windows Socket通信。下面是一个简单的示例代码:
```cpp
// 创建socket server
QTcpServer *server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
if (!server->listen(QHostAddress::Any, 1234)) {
qDebug() << "Error: Failed to start server";
}
// 新连接处理
void MyServer::onNewConnection() {
QTcpSocket *socket = server->nextPendingConnection();
connect(socket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
}
// 读取数据
void MyServer::onReadyRead() {
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
if (!socket) {
return;
}
QByteArray data = socket->readAll();
// 处理数据
// ...
}
```
这里创建了一个QTcpServer对象,并监听所有的IP地址和端口号为1234的连接请求。当有新的连接请求时,会触发newConnection信号,并在onNewConnection函数中创建一个QTcpSocket对象,并连接readyRead信号和disconnected信号。当数据准备好时,会触发readyRead信号,并在onReadyRead函数中读取数据并进行处理。
在客户端,可以使用QTcpSocket类来连接服务器并发送数据。示例代码如下:
```cpp
QTcpSocket *socket = new QTcpSocket(this);
socket->connectToHost("127.0.0.1", 1234);
if (socket->waitForConnected()) {
// 连接成功
socket->write("Hello World");
socket->flush();
}
socket->close();
```
这里创建了一个QTcpSocket对象,并连接到IP地址为127.0.0.1,端口号为1234的服务器。如果连接成功,则发送一个字符串“Hello World”。注意,Qt中的Socket通信是异步的,因此需要等待连接成功后再发送数据。最后需要关闭socket连接。
以上是一个简单的示例,实际使用中需要根据具体需求进行修改。
阅读全文