在侦听端口X的服务器收到来自客户端的请求后,它是否可以从其他进程和带有sendto调用的套接字发送响应 . 请注意,客户端还发送带有sendto(服务器地址)调用的请求 .
以下是步骤:
-
server打开一个套接字并将其绑定到IP地址(a.b.c.d)和端口(x)
-
客户端打开一个套接字并将其绑定到IP地址(k.l.m.n)和端口(z),并通过sendto调用向服务器发送请求 .
-
服务器(在不同的进程中)打开一个套接字并将其绑定到IP地址(a.b.c.d)和端口(y)
-
服务器使用sendto从上面的套接字向客户端发送响应
客户端和服务器都知道彼此的IP地址和端口号 .
我注意到,当服务器从其他进程发送响应时,客户端不会收到响应 . 否则就是这样 .
1 回答
这可以做,但有一些重要的警告 .
客户端必须绑定套接字并使用
sendto()
和recvfrom()
而不是connect()
'进入套接字并使用send()
和recv()
. 这允许它从任何地方接收传入的数据包,只要它们被定向到recvfrom()
正在读取的IP /端口 .如果客户端和服务器之间的路径中存在防火墙或NAT,则可能会阻止响应,因为发送IP /端口与客户端最初发送其请求的IP /端口不匹配 .