sockets - 使用UDP套接字接收数据

标签 sockets udp client-server recv

我正在编写一个应用程序,但我不明白一点。我正在尝试从特定客户端接收数据。在 TCP 套接字中,accept 返回一个 fd 编号,以便您可以通过该 fd 编号与特定客户端进行通信。

recvfrom中,任何内容都不能指定从该客户端接收数据。它接收来自每个发送者的数据。我正在尝试解决这个问题,但我不知道该怎么做。

第二个问题是,打开一个套接字后,我打开了另一个套接字。我将第二个套接字号发送给客户端,客户端在第二个套接字上发送第二个数据。在服务器端,服务器监听第一个套接字(而不是第二个套接字)。但是,尽管客户端从第二个套接字发送数据并且服务器监听第一个套接字,但服务器仍获取数据。我将两个套接字打印为整数,发现两个不同。服务器如何读取第一个套接字上第二个套接字发送的数据?


是的,我的问题有点复杂。基本上我说:

recvfrom(sock, &client, sizeof(Client), MSG_WAITALL, (struct sockaddr *)&clientAddr2, &size);

如何告诉特定客户端(例如客户端 2)监听上面的行? (在TCP套接字中,它是通过fd号完成的,但在UDP套接字中是如何实现的?)。

最佳答案

Accept 不与 udp 一起使用。你调用socket,你调用bind建立端口,你调用sendto和recvfrom。

恐怕我无法很好地理解您的描述,但我希望这会有所帮助。

TCP 和 UDP 是不同且不兼容的协议(protocol)。 UDP 客户端和服务器相互通信,TCP 客户端和服务器相互通信。假设,您可以使用 RAW 套接字与另一端的 TCP 通信,但您必须拥有完整的 TCP 协议(protocol)实现。

UDP 没有连接。如果您有不同客户端的概念,则必须使用放入数据包内的数据对它们进行分类。

关于sockets - 使用UDP套接字接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209878/

相关文章:

java - 客户端/服务器程序 : Connection Reset

c# - UDP客户端-BeginReceive后如何关闭

客户端/服务器交互

objective-c - IOS中的套接字断开

c++ - 如何破坏 C++ 接受函数?

c++ - C/C++ - 如何通过 UDP 套接字发送 "packets"中的视频文件?

node.js - 将数据从 UDP 套接字转发到 HTTP 服务器 Node.js

java - 如何实现服务器关闭

c++ - Recvfrom() 挂起——当服务器关闭时如何处理这个问题

c++ - 发送接收调用时带有 C++ 字符串的垃圾文本