在 Qt Creator 中直接呼叫 Windows Socket API(socket()、connect() 等)容易因編譯器差異(MSVC/MinGW)、標頭檔順序、巨集定義導致連結錯誤。
QTcpSocket 封裝了跨平台 Socket 操作,自動處理平台差異,無需手動鏈結系統庫。
// .pro 檔加入
QT += network
// 程式碼
#include <QTcpSocket>
#include <QHostAddress>
QString hostIp = "192.168.168.113";
quint16 port = 8000;
QTcpSocket* socket = new QTcpSocket(this);
socket->connectToHost(QHostAddress(hostIp), port);
connect(socket, &QTcpSocket::connected, [](){
qDebug() << "連線成功";
socket->write("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n");
});
connect(socket, &QTcpSocket::readyRead, [](){
qDebug() << "收到回應:" << socket->readAll();
});
connect(socket, QOverload::of(&QAbstractSocket::errorOccurred),
[](QAbstractSocket::SocketError err){
qDebug() << "錯誤:" << socket->errorString();
});
WSAStartup/WSACleanup,Linux 不需,跨平台麻煩。select/epoll/IOCP。LIBS += -lws2_32 在 .pro 中。#include <winsock2.h> **在** #include <windows.h> **之前**。_WINSOCK_DEPRECATED_NO_WARNINGS 抑制警告。WSAStartup(MAKEWORD(2,2), &wsaData) 後再用 socket 函數。總結:Qt 專案請優先用 QTcpSocket/QUdpSocket,省去平台細節,專注業務邏輯。