python 服务端与c++客户端通讯_在C++与Python之间通信(IPC)

我有应用服务器(服务器.py)和C++作为客户端(客户端.exe). 客户端.exe将变量发送到服务器.py通过“命名管道”。在

问题是当我从客户端.exe在服务器.py只产生“D”(只发送第一个字符)。在

有人能帮我吗??在

C++ +<

服务器.pyfrom ctypes import *

PIPE_ACCESS_DUPLEX = 0x3

PIPE_TYPE_MESSAGE = 0x4

PIPE_READMODE_MESSAGE = 0x2

PIPE_WAIT = 0

PIPE_UNLIMITED_INSTANCES = 255

BUFSIZE = 4096

NMPWAIT_USE_DEFAULT_WAIT = 0

INVALID_HANDLE_VALUE = -1

ERROR_PIPE_CONNECTED = 535

MESSAGE = "Default answer from server\0"

szPipename = "\\\\.\\pipe\\mynamedpipe"

def ReadWrite_ClientPipe_Thread(hPipe):

chBuf = create_string_buffer(BUFSIZE)

cbRead = c_ulong(0)

while 1:

fSuccess = windll.kernel32.ReadFile(hPipe, chBuf, BUFSIZE,

byref(cbRead), None)

if ((fSuccess ==1) or (cbRead.value != 0)):

print chBuf.value

cbWritten = c_ulong(0)

fSuccess = windll.kernel32.WriteFile(hPipe,c_char_pc_char_p(MESSAGE),len(MESSAGE),byref(cbWritten),None)

else:

break

if ( (not fSuccess) or (len(MESSAGE) != cbWritten.value)):

print "Could not reply to the client's request from the pipe"

break

else:

print "Number of bytes written:", cbWritten.value

windll.kernel32.FlushFileBuffers(hPipe)

windll.kernel32.DisconnectNamedPipe(hPipe)

windll.kernel32.CloseHandle(hPipe)

return 0

def main():

THREADFUNC = CFUNCTYPE(c_int, c_int)

thread_func = THREADFUNC(ReadWrite_ClientPipe_Thread)

while 1:

hPipe = windll.kernel32.CreateNamedPipeA(szPipename,PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, NMPWAIT_USE_DEFAULT_WAIT,None)

if (hPipe == INVALID_HANDLE_VALUE):

print "Error in creating Named Pipe"

return 0

fConnected = windll.kernel32.ConnectNamedPipe(hPipe, None)

if ((fConnected == 0) and (windll.kernel32.GetLastError() == ERROR_PIPE_CONNECTED)):

fConnected = 1

if (fConnected == 1):

dwThreadId = c_ulong(0)

hThread = windll.kernel32.CreateThread(None, 0, thread_func, hPipe, 0, byref(dwThreadId))

if (hThread == -1):

print "Create Thread failed"

return 0

else:

windll.kernel32.CloseHandle(hThread)

else:

print "Could not connect to the Named Pipe"

windll.kernel32.CloseHandle(hPipe)

return 0

if __name__ == "__main__":

main()

客户端.cpp

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值