TCP接收数据的问题,发送过来的都是结构体,应该如何接收

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP接收数据的问题,发送过来的都是结构体,应该如何接收相关的知识,希望对你有一定的参考价值。

sockClient = socket(AF_INET, SOCK_STREAM, 0);
if (sockClient == INVALID_SOCKET)
return;

addrClient.sin_addr.S_un.S_addr = inet_addr(pRecv->m_strIpAddr);
addrClient.sin_family = AF_INET;
addrClient.sin_port = htons(6000);

if (connect(sockClient, (SOCKADDR*)&addrClient,
sizeof(SOCKADDR)) == SOCKET_ERROR)

AfxMessageBox("应用线程与服务器连接失败!");
return;


msg.cmd = 3;
msg.time = m_time[i];
msg.devid = pRecv->m_iDevID;

if (send(sockClient, (char*)&msg, sizeof(mgd_msghdr), 0 ) == SOCKET_ERROR)
continue;

//Sleep(100);

iLen = recv(sockClient, buf, sizeof(buf), 0);

if (iLen < 0 )
continue;

pMsg = (mgd_msghdr*)buf;

bodyLen = (iLen - pMsg->hlen) / sizeof(mgd_axpdesc);

m_time[i] = pMsg->time;

DropTable(mysql, pRecv->m_iDevID);
CreateTable(mysql, pRecv->m_iDevID);

axp = (mgd_axpdesc*)(pMsg+1);

for (j = 0; j < bodyLen; j++)

InsertAxp(mysql, pRecv->m_iDevID, axp);

axp++;

从服务器发送过来的数据里面有一个头部,我主要是想把除头部之外的体部一个结构体一个结构体的存储到数据库中,应该怎么做啊

我是觉得你可以用一个char buffer[1024](如果这个还不够的话,可以申请大点),然后把结构体里面的内容一个一个写进buffer里面,不是char型的,你可以转化,在接收的时候,你就从buffer里面,按照你写进去的规则,一个一个的读出来,然后赋值给一个新的结构体。
我建议一次就发送一个结构体的内容,可以循环发送,接收的时候循环接收并处理。不懂的话,直接找我
参考技术A 在网络字节序里面是以二进制发送的,你可以使用一个char类型的数组,在sender,你可以把你的结构体转换为字节序,在receiver,你可以精确地把每一个结构体读出来。然后重新封装成Struct.本回答被提问者采纳

以上是关于TCP接收数据的问题,发送过来的都是结构体,应该如何接收的主要内容,如果未能解决你的问题,请参考以下文章

java socket传送一个结构体给用C++编写的服务器解析的问题

C++ SOCKET发送结构体及接收

用socket发送接收数据,但每次接收的数据字节长度都大于发送的25个字节?

关于TCP和UDP的一些问题记录

搞了半天,终于弄懂了TCP Socket数据的接收和发送,太难~

boost asio 接收数据异常 $/x1