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