【问题标题】:writing to a tcp socket写入 tcp 套接字
【发布时间】:2013-05-25 09:28:21
【问题描述】:

这是一个非常基本的问题。我刚刚开始一些套接字编程,我正在使用 qt/c++。我写了一个简单的程序作为练习,它连接到一个套接字(端口 80 的 localhost 环回),向它写入一些数据,等待响应,然后在我的终端中输出响应。

这是程序的主要方法:

void TcpSocket::ConnectSocket()
{
    socket = new QTcpSocket(this);
    socket->connectToHost("localhost", 80);

    if(socket->waitForConnected(3000)){
        qDebug() << "Connected";

        socket->write("Hello Server");
        socket->waitForBytesWritten(1000);
        socket->waitForReadyRead(3000);
        qDebug() << "Reading: " << socket->bytesAvailable();
        qDebug() << socket->readAll();
        socket->close();
    }
    else {
        qDebug() << "Could not connect";
    }
}

上面代码的响应是这样的:

Connected 
Reading:  0 
"" 

现在,我实际上在端口 80 为 localhost 设置了一个虚拟主机,它为我的本地机器上的网页提供服务。当我执行该程序时,端点 localhost:80 上似乎没有发生任何事情。

如果端口 80 正在侦听,它会将“Hello Server”写入哪里?为什么它没有响应?

【问题讨论】:

    标签: sockets tcp


    【解决方案1】:

    Web 服务器没有响应您写的内容,因为您没有完成发送请求。至少,您需要在您的文章中添加“\n\r\n”。

    https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

    【讨论】:

    • 另一个问题是我必须在 ubuntu 本身的一个端口上创建一个服务器:sudo nc -l 77。有没有办法告诉操作系统在一个我的 qt 程序中的指定端口?
    • 当然,一切皆有可能。一般来说,以 root 身份运行东西的安全性很差。只需使用高端口号(1024 以上)即可。
    猜你喜欢
    • 2015-08-04
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2015-12-28
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多