我正在编写一个应用程序,但我不明白一点。我正在尝试从特定客户端接收数据。在 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/