带有Winsock2和HANDLES的Python和C ++ [关闭]

问题描述 投票:-5回答:1

您好,我有一个用C ++编写的客户端和一个用Python3.7编写的服务器

客户端程序通过winsock接收指令,我能够生成命令行外壳(cmd.exe)并通过将其传递给转换为HANDLE的套接字(例如(HANDLE)winsock)与之交互。

因此,我基本上是使用WinApi CreateProcess函数创建一个CMD进程,并将所有的stds转发到winsock套接字。与NetCat一起使用时,客户端运行完全正常。

问题在服务器端。当我给出基本指令而不产生外壳时,一切都很好,但是当产生外壳(它将我的CMD进程的所有std输入和输出绑定到套接字)时,我根本无法发送任何数据。例如,我使用socket.send(“ dir”),它什么也不返回。

我尝试使用nclib库,当我使用interact()函数将服务器程序的所有标准输入和输出绑定到套接字并且可以与外壳进行交互时,它工作得很好。问题是我无法返回正常的指令,这意味着我必须与该特定客户端通信,并且不能更改为其他客户端,因为我无法退出interact()函数或不知道如何。

此外,我还在Mac OS 10.14上开发两个程序。我已经安装了Wine,并且当我使用Wine运行Client程序时,包括外壳程序都可以正常工作,但是在虚拟机上运行它却没有。

谢谢您的帮助:]

发送代码: inp = input() sock.send(inp.encode())

python c++ sockets winapi
1个回答
0
投票

解决方案在命令末尾添加换行符(解决方案由Remy Lebeau提供:]

   inp = input()
   inp = inp + "\r\n"
   sock.send(inp.encode())
© www.soinside.com 2019 - 2024. All rights reserved.