Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Visual Basic服务器和Qt客户端(QNetworkReply已完成)_Vb.net_Qt_Qnetworkaccessmanager_Qnetworkrequest_Qnetworkreply - Fatal编程技术网

Vb.net Visual Basic服务器和Qt客户端(QNetworkReply已完成)

Vb.net Visual Basic服务器和Qt客户端(QNetworkReply已完成),vb.net,qt,qnetworkaccessmanager,qnetworkrequest,qnetworkreply,Vb.net,Qt,Qnetworkaccessmanager,Qnetworkrequest,Qnetworkreply,我为一件(可能)非常愚蠢的事情发疯了。。。 即使在服务器发送数据之后,QNetworkReply finished信号也会发出 我有一个非常简单的vb服务器 Public Class WebServer Public Shared Sub Main() Try Dim strIP As String = "serverip" Dim hostName As String = Dns.GetHostName()

我为一件(可能)非常愚蠢的事情发疯了。。。 即使在服务器发送数据之后,QNetworkReply finished信号也会发出

我有一个非常简单的vb服务器

Public Class WebServer
    Public Shared Sub Main()
        Try
            Dim strIP As String = "serverip"
            Dim hostName As String = Dns.GetHostName()
            Dim serverIP As IPAddress = Nothing
            Dim checkIP As IPAddress = Nothing

            Dim strPort As String = "9071"

            For Each checkIP In Dns.GetHostEntry(hostName).AddressList()
                DebugLog("Checking IP: " & checkIP.ToString)
                If checkIP.ToString = strIP Then
                    serverIP = checkIP
                End If
            Next

            Dim tcpListener As New TcpListener(serverIP, Int32.Parse(strPort))

            tcpListener.Start()

            Dim clientSocket As System.Net.Sockets.Socket
            clientSocket = tcpListener.AcceptSocket()

            Dim respByte() As Byte = Encoding.ASCII.GetBytes("replystring")

            clientSocket.Send(respByte, 0, respByte.Length, SocketFlags.None)

            clientSocket.Shutdown(SocketShutdown.Both)
            clientSocket.Close()

        Catch ex As Exception
            MsgBox("Exception")
        End Try
    End Sub
End Class
当我用qt打电话时,返回一个空字符串。。出现了一个错误 在接收和处理整个答复之前,远程服务器过早地关闭了连接

下面是客户端请求代码

    void TESTJson::makeTheCallBtnPressed()
    {

    ui.label->clear();
    ui.label_2->clear();

        QUrl url("serveraddressandport");
        QString method = "methodname";
        url.setPath(QString("%1%2").arg(url.path()).arg(method));

        QNetworkRequest request;
        request.setUrl(url);

        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

        QByteArray postData; // test
        postData.append("param1=hi");

        networkManager= new QNetworkAccessManager();

        connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(_NETAM_finished(QNetworkReply*)));

        reply = networkManager->post(request, postData);

        connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(_downloadProgress(qint64, qint64)));
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(_error(QNetworkReply::NetworkError)));
        connect(reply, SIGNAL(finished()), this, SLOT(_finished()));
        connect(reply, SIGNAL(metaDataChanged()), this, SLOT(_metaDataChanged()));
        connect(reply, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(_sslErrors(const QList<QSslError> &)));
        connect(reply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(_uploadProgress(qint64, qint64)));
}
void TESTJson::makeTheCallBtnPressed()
{
ui.label->clear();
ui.label_2->clear();
QUrl url(“服务器地址和端口”);
QString method=“methodname”;
setPath(QString(“%1%2”).arg(url.path()).arg(方法));
QNetworkRequest请求;
setUrl(url);
setHeader(QNetworkRequest::ContentTypeHeader,“application/x-www-form-urlencoded”);
QByteArray postData;//测试
postData.append(“param1=hi”);
networkManager=新的QNetworkAccessManager();
连接(networkManager,信号(完成(QNetworkReply*)),此,插槽(NETAM完成(QNetworkReply*));
回复=networkManager->post(请求、postData);
连接(应答,信号(下载进度(qint64,qint64)),此,插槽(U下载进度(qint64,qint64));
连接(应答,信号(错误(QNetworkReply::NetworkError)),此,插槽(_错误(QNetworkReply::NetworkError));
连接(应答,信号(finished()),此,插槽(_finished());
连接(应答,信号(metaDataChanged()),此,插槽(_metaDataChanged());
连接(应答、信号(sslErrors(const-QList&))、此、插槽(sslErrors(const-QList&));
连接(应答,信号(上传进度(qint64,qint64)),这个,插槽(上传进度(qint64,qint64));
}
谁能帮帮我吗?

解决了。。 在发送数据之前,我们还需要发送报头,以便发出完成的信号

 ' Set HTML Header
  Dim htmlHeader As String = _
          "HTTP/1.0 200 OK" & ControlChars.CrLf & _
          "Content-Length: " & respByte.Length & ControlChars.CrLf & _
          "Content-Type: " & getContentType(strBuff) & _
          ControlChars.CrLf & ControlChars.CrLf

  ' The content Length of HTML Header
  Dim headerByte() As Byte = Encoding.ASCII.GetBytes(htmlHeader)

  ' Send HTML Header back to Web Browser
  clientSocket.Send(headerByte, 0, headerByte.Length, SocketFlags.None)