#include #include #include #ifdef _WIN32 #include "Windows.h" #endif void readStdin(); void onConnect(); void readSocket(); void onError(QTcpSocket::SocketError err); QTcpSocket socket; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // obsługa standardowego wejścia jako zdarzenie #ifdef _WIN32 QWinEventNotifier inputNotifier(GetStdHandle(STD_INPUT_HANDLE)); QObject::connect(&inputNotifier, &QWinEventNotifier::activated, readStdin); #else QSocketNotifier inputNotifier(0, QSocketNotifier::Read); QObject::connect(&inputNotifier, &QSocketNotifier::activated, readStdin); #endif QObject::connect(&socket, &QTcpSocket::connected, onConnect); QObject::connect(&socket, &QTcpSocket::readyRead, readSocket); QObject::connect(&socket, &QTcpSocket::errorOccurred, onError); socket.connectToHost(a.arguments().at(1), a.arguments().at(2).toUShort()); return a.exec(); } void readStdin(){ QByteArray ba(1024, '\0'); int count = read(STDIN_FILENO, ba.data(), ba.size()); if(count<=0){ socket.disconnectFromHost(); QByteArray ba = "\033[1mError or EOF on standard input\033[0m\n"; write(STDOUT_FILENO, ba.data(), ba.length()); QCoreApplication::exit(0); } ba.resize(count); socket.write(ba); } void onConnect(){ QByteArray ba = ("\033[1mConnected successfully to : " + socket.peerAddress().toString() + ":" + QString::number(socket.peerPort()) + "\033[0m\n").toLocal8Bit(); write(STDOUT_FILENO, ba.data(), ba.length()); } void readSocket(){ QByteArray ba = socket.readAll(); write(STDOUT_FILENO, ba.data(), ba.length()); } void onError(QTcpSocket::SocketError err){ QByteArray ba = ("\033[1mError or disconnect on socket: "+socket.errorString()+"\033[0m\n").toLocal8Bit(); write(STDOUT_FILENO, ba.data(), ba.length()); QCoreApplication::exit(0); }