繁体   English   中英

在 C 中通过套接字发送结构

[英]Sending struct over socket in C

我正在尝试通过 sockets 发送结构。与 arrays 的连接工作正常,但使用简单的结构,服务器仅Recv - 1 - 1如果我将 ID 或状态更改为另一个数字(客户端正在运行时),它会收到什么都没有,但是客户已经发送了。 如果我将其改回 ID=1 和 status=1,它会再次发送并正确接收。

客户端:

void func()
{
    printf("Send - %i - %i\n", mRELAIS.ID, mRELAIS.status);
    send(sockfd,&mRELAIS,sizeof(struct RELAIS),0);
}

Output: Send - 1 - 1 -1-1分别Send - 1 - 0 -1-0

我在客户端更改它的地方:

if(temperature>(g_Value+g_PlusMinus) && relais[0]==0) 
{
    printf("%.1lf°C Relais wird 1 Soll %.1lf\n", temperature,(g_Value+g_PlusMinus)); 
    mRELAIS.ID=1;
    mRELAIS.status=1; 
    func();
}
else if(temperature<(g_Value-g_PlusMinus) && relais[0]==1) 
{
    printf("%.1lf°C Relais wird 0 Soll %.1lf\n", temperature,(g_Value-g_PlusMinus)); 
    mRELAIS.ID=1;
    mRELAIS.status=0; 
    func();
}

服务器端:

for (;;)
{
    recv(connfd, &mRELAIS, sizeof(struct RELAIS),0);
    printf("Recv - %i - %i\n", mRELAIS.ID, mRELAIS.status);
    ....
}

Output:分别Send - 1 - 1 -1-1

有没有人有解决问题的建议? 谢谢。

不确定这是否是您的直接问题,但您的接收代码是错误的。 Tco 是一种流协议,而不是面向消息的协议。 您可能会收到一个 50 个字节的发送,因为 50 个一个字节会收到。 或 2 个 25 字节接收。 你必须 lipp on recv 直到你有整个发送。 反过来意味着接收者必须以某种方式知道消息的大小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM