Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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
socket编程c++;python:客户端向服务器发送第二条消息后,客户端与服务器的聊天通信中断。为什么?_Python_C++_Sockets_Chat - Fatal编程技术网

socket编程c++;python:客户端向服务器发送第二条消息后,客户端与服务器的聊天通信中断。为什么?

socket编程c++;python:客户端向服务器发送第二条消息后,客户端与服务器的聊天通信中断。为什么?,python,c++,sockets,chat,Python,C++,Sockets,Chat,服务器正在运行python代码。客户端正在C++中运行代码。服务器开始连接到工作正常的服务器,它接受用户输入并向服务器发送第一条消息(这在while循环中发生)。服务器显示客户机消息,从服务器上的用户获取输入并将其发送给客户机。客户端显示服务器消息。它接受用户的输入并尝试将其发送到服务器,但服务器没有显示任何内容。看起来它仍在等待客户端的响应。不显示任何错误。我对socketing编程是新手,我研究过类似的实现,这些实现承诺可以工作,但到目前为止还不能工作。如果我从客户端删除while循环,它将

服务器正在运行python代码。客户端正在C++中运行代码。服务器开始连接到工作正常的服务器,它接受用户输入并向服务器发送第一条消息(这在while循环中发生)。服务器显示客户机消息,从服务器上的用户获取输入并将其发送给客户机。客户端显示服务器消息。它接受用户的输入并尝试将其发送到服务器,但服务器没有显示任何内容。看起来它仍在等待客户端的响应。不显示任何错误。我对socketing编程是新手,我研究过类似的实现,这些实现承诺可以工作,但到目前为止还不能工作。如果我从客户端删除while循环,它将按预期工作。消息被发送到服务器,客户端程序终止,但聊天的目的是持续通信,直到其中一方不关闭由条件处理的连接。任何帮助都将不胜感激

python中的服务器端循环:

while 1:
    connectionSocket, addr = serverSocket.accept()
    sentence = connectionSocket.recv(4096)
    print sentence
    serverSentence = raw_input('Me >: ')
    denial = 'The Connection was ended by the server.Bye!'
    if serverSentence == '\quit':
        connectionSocket.send(denial)
        connectionSocket.close()
    else:
        fullResponse = 'Server > ' + serverSentence
        connectionSocket.send(fullResponse)
C++中的客户端循环:

while(1)
    {
        cout << "Me >";
        string data;
        getline(cin, data);
        name.append(data);  

        memset(&msg, 0, sizeof(msg));//clear the buffer
        strcpy(msg, name.c_str());
        if(data == "\\quit")
        {\
            send(clientSd, (char*)&msg, strlen(msg), 0);
            break;
        }
        bytesWritten += send(clientSd, (char*)&msg, strlen(msg), 0);

        memset(&msg, 0, sizeof(msg));//clear the buffer
        bytesRead += recv(clientSd, (char*)&msg, sizeof(msg), 0);
        /*if(strcmp(msg, "quit"))
        {
            cout << "Server has quit the session" << endl;
            break;
        }*/
        cout<< msg << endl;
    }

    close(clientSd);
    cout << "The client has closed the connection. Bye!" << endl;
while(1)
{

CUT的Python代码的循环看起来像每个迭代,它接受一个全新的连接,读取消息并显示它;它没有从刚刚建立的套接字中读取的循环。这与C++代码试图做的相反。Phil M,我明白你的意思。这完全有意义!我在while循环中使用了第一行。服务器代码脱离了循环,现在运行得非常好!我一直在尝试修改客户端代码,但最终我发现错误应该在服务器上的某个地方。我花了几个小时才完成。非常感谢您的帮助!现在唯一发生的事是当我键入“\quit”时在服务器中,它会给我一个错误“坏文件描述符”,并终止程序。不相关,但您应该检查send/recv的返回值。错误时,它们应该返回-1。