套接字无法在C ++和python

时间:2017-03-07 13:00:16

标签: python c++ sockets

我试图以30arrays / sec的速度将一些浮动数组(66个元素)从C ++发送到localhost中的python

这是我的C ++客户端

int r;
char message[200];
WSAData wsaData;
WORD DLLVersion;
SOCKADDR_IN addr;
int addlen;
SOCKET sConnect;


DLLVersion = MAKEWORD(2, 1);
r = WSAStartup(DLLVersion, &wsaData);
addlen = sizeof(addr);
sConnect = socket(AF_INET, SOCK_STREAM, NULL);// IPv4  TCP
int yes = 1;
setsockopt(sConnect, IPPROTO_TCP, TCP_NODELAY, (char *)&yes, sizeof(int));//1 on 0 off Nagle buffering
addr.sin_addr.s_addr = inet_addr(address);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);

int result = connect(sConnect, (SOCKADDR*)&addr, sizeof(addr));
if (result == SOCKET_ERROR)
{
    cout << "Fail to connect!" << endl;
    exit(0);
}

对于每次迭代,我都会发送这样的数据

send(sConnect, &string_data[0], 66*sizeof(float), 0);

在我的python服务器上

import socketserver
import numpy as np

class MyTCPHandler(socketserver.BaseRequestHandler):

   def handle(self):
     counter=0
     temp=np.zeros(66)
     while(1):
       self.data = self.request.recv(264).strip()
       temp=np.fromstring(self.data,dtype=np.float32)
       print(counter)
       counter +=1

每次收到新数据时,计数器都会打印出来 但它会显示

  

字符串大小必须是元素大小的倍数

并停止迭代,但并不总是相同 那说 有时它会停在14号柜台 或者2 或其他人

是因为我发送得太快了吗?但是我已经在客户端启用了TCP_NODELAY 我该如何解决这个问题? 或者有更好的方式发送如此大量的数据?

0 个答案:

没有答案