我试图以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 我该如何解决这个问题? 或者有更好的方式发送如此大量的数据?