2013-05-29 112 views
0

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

下面是该方案的主要方法:

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:80上绝对没有任何事情发生。

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

回答

0

由于您未完成发送请求,因此Web服务器未对您写入的内容做出响应。至少,您需要在写入时添加“\ n \ r \ n”。

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

+0

的另一个问题是,我不得不到Ubuntu本身创建我的港口之一的服务器:sudo的NC -l 77.有没有办法做到告诉操作系统创建一个网络连接我的qt程序中指定的端口? – JohnMerlino

+0

当然,任何事情都是可能的。一般来说,以root身份运行的东西是不安全的。只需使用高端口号(高于1024)。 – BraveNewCurrency