gpt4 book ai didi

c - 接收特定消息的socket编程C

转载 作者:行者123 更新时间:2023-11-30 17:45:53 26 4
gpt4 key购买 nike

您好,我在网络编程方面遇到问题。是否可以使用 recv() 接收特定消息并忽略同时发送的其他消息是否可能。假设服务器和客户端已经连接。

服务器.c

sprintf(client_message, "%s hello this is test message 1", packages.userName);
write(connfd , client_message , strlen(client_message)); //Send the message back to client

sprintf(client_message, "%s hello this is test message 2", packages.userName);
write(connfd , client_message , strlen(client_message)); //Send the message back to client

sprintf(client_message, "%s hello this is test message 3", packages.userName);
write(connfd , client_message , strlen(client_message)); //Send the message back to client

client.c(但我只想接收第二条消息)

char server_reply[2000];
int received_bytes = 0;
int remaining_bytes = sizeof(server_reply);

while (remaining_bytes > 0) {
int res = recv(sockfd , &server_reply[remaining_bytes] , remaining_bytes, 0);
if (res < 0) {
printf("Connection lost from server...\n");
isconnected = 0;
close(sockfd);
break;
}
received_bytes += res;
remaining_bytes -= res;
}

puts(server_reply);

谁能帮忙谢谢

最佳答案

不,TCP 套接字是字节流:字节将按照发送的顺序接收。

有多种方法可以实现您想要的目标。

如果发送者和接收者都在同一台机器上,那么你可以使用IPC:支持消息类型/优先级的消息队列(#include <sys/msg.h>)。

您还可以创建一个包装器来读取已收到的所有消息,然后返回具有最高优先级的消息。 (请注意,这并不能保证消息 2 将在消息 1 之前被处理,它仅保证如果消息 2 在消息 1 处理之前到达,则消息 2 将在消息 1 之前被处理。)

无论如何,您需要的一件事就是协议(protocol)。现在,接收者不知道一条消息在哪里结束以及下一条消息从哪里开始。请记住,IP 包的概念并不存在于 TCP 级别;TCP 级别不存在 IP 包的概念。套接字传递字节流。

套接字中有一种称为带外数据 (OOB) 的机制,允许在正常流之外传输数据。我自己从未使用过它,但我相信您可以在互联网上找到示例。

关于c - 接收特定消息的socket编程C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com