【问题标题】:How to create a Socket based on the data如何根据数据创建 Socket
【发布时间】:2014-07-20 05:14:48
【问题描述】:

我想知道如何根据数据创建套接字。例如,如果数据需要可靠性,它将使用 SOCK_STREAM 创建一个套接字,因此它将选择 TCP,否则如果它不需要任何可靠性,我将使用 SOCK_DGRAM 用于 UDP。

这可以使用 switch 或 if-else 条件来实现吗?

我是这个主题的新手。如果有人为此提供了很好的资源,我真的很感激。

【问题讨论】:

  • 您能否回答如何在不先获取数据的情况下以编程方式确定数据的类型?这似乎是一个先有鸡还是先有蛋的问题。通常,您会设计采集方法(协议)以适应特定数据,而不是相反。谷歌搜索 Sockets Programming tutorial for C 得到 290 万个答案。前 9 或 10 个看起来非常相关。
  • 我有一个使用各种数据类型创建的表,用于这种情况(在该表中,我计算了数据类型的吞吐量、延迟和丢包率)。所以我需要根据表格检查合适的协议。使用该表,我们可以为特定数据选择最佳协议。

标签: c sockets tcp udp


【解决方案1】:

从您的评论看来,您将通过读取实际数据流来决定创建哪种套接字类型,而是通过提前参考表格来决定.那是对的吗?那么答案是肯定的,您可以使用某种分支来为您要连接的 IP/端口创建适当的套接字/连接类型。

如果您想感知数据的类型,然后根据字节流包含的内容做出决定,那么您可以创建一个临时 INET 套接字,读取足够的字节以确定内容,然后决定是否需要不同的协议来优化您的需求。一旦确定了最佳连接类型,您可以决定要么保留当前连接,要么关闭它,然后使用具有更优化协议的套接字类型重新连接。步骤:

1 使用任何协议连接到服务器。
2 分析前几次读取的数据内容确定最佳套接字协议。
3如果内容表明当前协议是最佳的,则保留它。
4 如果内容表明当前协议不是最优的, 关闭它,使用最佳套接字类型重新打开。

这一切都假设您知道您选择连接的服务器是什么类型的数据
将提供。 这似乎不太可能。您将更有可能知道
的类型 将为您连接的每个 IP/端口地址提供数据,因此知道哪种类型的连接是最佳的。

【讨论】:

  • 有多种数据类型,如 gps、wifi、地图数据等。我的研究项目是根据数据类型(使用该表)选择最佳协议。如果我们对每种数据类型使用相同的协议,它可能不是最佳协议。
【解决方案2】:

您不能使用SOCK_STREAMSOCK_DGRAM 创建相同的套接字。你必须选择一个。 决定协议,以及您的数据将如何传输,而不是您的数据

【讨论】:

  • 你能再解释一下吗?
  • 这是我的研究项目。我需要根据数据动态决定协议。这就是我问这个问题的原因。
  • @chathura2020 如果需要详细的socket编程,可以看我的视频。它用于 Winsock 编程。 youtube.com/watch?v=hvcUVYC46mU
  • 谢谢,我也会看那个的,但是你有什么想法来实现这个吗??
  • 他不是在问“用 SOCK_STREAM 和 SOCK_DGRAM 创建[ing]同一个套接字”。他正在询问是否要创建其中一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 2021-12-09
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多