gpt4 book ai didi

c - C 中基于 UDP 的聊天

转载 作者:行者123 更新时间:2023-11-30 15:39:58 32 4
gpt4 key购买 nike

我应该用 C 语言制作一个基于 dgram 的通信器。我不知道应该将哪些参数传递给 bind() 函数。我浏览了 StackOverflow 上的大多数 UDP 聊天问题和代码,但仍然找不到有关该问题的任何具体信息。

我应该使用什么类型的地址结构?

我可以使用什么端口?有大于 1024 的数字吗?

我应该将套接字绑定(bind)到什么 IP 地址? (大多数人都输入INADDR_ANY,但这不是只用于接收吗?)

另外,我需要多个套接字吗?一个用于接收消息,另一个用于发送消息。

最佳答案

What type of address structure should I use?

如果您使用 IPv4,请使用 sockaddr_in。如果您想使用 IPv6,请使用 sockaddr_in6。

What port can I use? Any number bigger than 1024 ?

是的,假设没有其他程序已将该端口号用于其自己的 UDP 套接字。 (如果另一个程序正在使用您选择的端口号,则会导致bind()失败并出现errno EADDRINUSE)

What IP adress do I bind my socket with? (most of people put INADDR_ANY but isn't it for receiving only?)

INADDR_ANY 是您通常想要使用的。它告诉操作系统您想要在任何计算机网络接口(interface)上接收传入的 UDP 数据包。 (如果您只想从特定网络接口(interface) OTOH 接收 UDP 数据包,例如仅在 WiFi 上,您可以指定该网络接口(interface)的 IP 地址)

Also, do I need multiple sockets? One for receiving & another for sending messages.

如果需要,您可以拥有多个套接字,但没有必要这样做。您可以使用单个套接字来发送和接收 UDP 数据包。一种常见的模式是使用单个套接字,设置为非阻塞模式,以及 select() 或 poll() 之类的东西来复用程序的输入和输出需求。另一种模式是使用两个线程(一个用于发送,一个用于接收)、阻塞 I/O 以及一个或两个套接字(取决于您是否希望两个线程共享一个套接字,或者为每个线程分配一个套接字)。自己的 socket )。我自己更喜欢单线程/单套接字/select() 解决方案,因为我认为这是最不容易出错的方法。

关于c - C 中基于 UDP 的聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221682/

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