Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 断开连接的udp套接字是否仍会从另一个套接字连接的端口接收流量?_C_Udp - Fatal编程技术网

C 断开连接的udp套接字是否仍会从另一个套接字连接的端口接收流量?

C 断开连接的udp套接字是否仍会从另一个套接字连接的端口接收流量?,c,udp,C,Udp,我正在尝试编写一个服务器/客户机对来运行udp,唯一能让它运行的方法是在连接开始之前让服务器知道客户机的ip和端口。我的新设计包括等待数据包进入,记录发送方地址,分支到子进程(父进程循环并继续侦听),然后将传输的数据包连接到客户端。然后,子套接字应该只从关联的客户端接收数据包,但文档不清楚父套接字是否将继续从该客户端接收流量。我正在做一个程序来尝试,但我想我可以同时问这个问题 编辑:似乎当孩子的套接字连接时,它也会连接家长的套接字。UDP协议不操作连接,它是一种无连接协议。一方监听,另一方只发送

我正在尝试编写一个服务器/客户机对来运行udp,唯一能让它运行的方法是在连接开始之前让服务器知道客户机的ip和端口。我的新设计包括等待数据包进入,记录发送方地址,分支到子进程(父进程循环并继续侦听),然后将传输的数据包连接到客户端。然后,子套接字应该只从关联的客户端接收数据包,但文档不清楚父套接字是否将继续从该客户端接收流量。我正在做一个程序来尝试,但我想我可以同时问这个问题


编辑:似乎当孩子的套接字连接时,它也会连接家长的套接字。

UDP协议不操作连接,它是一种无连接协议。一方监听,另一方只发送数据报,数据通道就可以工作了

关于这个问题(很抱歉,之前没有说到这一点):在使用UDP时,分叉不是解决问题的方法。基于连接的协议与该技术一起被广泛使用。这是可能的,因为:

  • 您可以在
    listen()之后立即分叉
  • 第一个进程接受连接并与之协同工作(只有该进程才接受新创建的连接套接字)
当您使用UDP时,您不会有这样的间隙(与TCP之前的
accept()

因此,在设计UDP服务时,您需要

  • 将非阻塞I/O与事件循环或
  • 设计线程解决方案

我认为您不理解UDP协议是什么。它被设计为无连接协议。@Jacobbollack来自
connect(2)
手册页:“如果socket sockfd是SOCK_DGRAM类型,那么addr是默认情况下发送数据报的地址,也是接收数据报的唯一地址。”问题是,来自
addr
的数据包是否从父端口(绑定到同一端口)中的套接字转移?“我正在编写一个程序来尝试它,但我想我可以同时问这个问题。”这正是问题的关键所在,不要只是问,如果你被卡住了,试着问。我问这个问题是因为如果有人能在我完成实验之前回答,我会节省时间,考虑到这似乎是一个相当简单的“是或否”问题我不认为我在浪费任何人的时间。但是你可以使用udp套接字的
connect
功能。从
connect(2)
手册页:“如果socket sockfd是SOCK_DGRAM类型,那么addr是默认情况下发送数据报的地址,也是接收数据报的唯一地址。”@RobbieMckennie,这是一个限制,但仍然与
连接
术语没有任何关系。这只意味着你可以在连接后使用
发送
,因为
发送到
总是需要传递远程主机的地址好的,但这仍然不能回答我的问题。你是说我对soc做了什么子进程中的ket不会影响父进程中的套接字做什么?@RobbieMckennie,当你分叉一个进程时,它的资源也会分叉,所以你会在子进程或父进程中得到一个数据包(这取决于谁首先运行recv)