在端口 X 上监听的服务器收到来自客户端的请求后,它是否可以发送来自不同进程的响应和带有 sendto 调用的套接字。请注意,客户端还发送带有 sendto(服务器地址)调用的请求。
步骤如下:
- 服务器打开一个套接字并将其绑定(bind)到 IP 地址 (a.b.c.d) 和端口 (x)
- 客户端打开一个套接字并将其绑定(bind)到 IP 地址 (k.l.m.n) 和端口 (z),然后使用 sendto 调用向服务器发送请求。
- 服务器(在不同的进程中)打开一个套接字并将其绑定(bind)到 IP 地址 (a.b.c.d) 和端口 (y)
- 服务器使用 sendto 从上面的套接字发送响应给客户端
客户端和服务器都知道对方的IP地址和端口号。
我注意到当服务器发送来自不同进程的响应时,客户端没有收到响应。否则,它会。
最佳答案
这是可以做到的,但有一些重要的注意事项。
客户端必须绑定(bind)套接字并使用
sendto()
和recvfrom()
而不是connect()
套接字并使用send()
和recv()
。这允许它接收来自任何地方的传入数据包,只要它们被定向到recvfrom()
正在读取的 IP/端口。如果客户端和服务器之间的路径中有防火墙或 NAT,它可能会阻止响应,因为发送 IP/端口与客户端最初将其请求发送到的 IP/端口不匹配。
关于服务器可以从不同的进程和套接字发送响应吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823304/