服务器可以从其他进程和套接字发送响应吗?

时间:2016-06-14 21:39:43

标签: c linux sockets networking

在侦听端口X的服务器收到来自客户端的请求后,它是否可以从其他进程和带有sendto调用的套接字发送响应。请注意,客户端还通过sendto(服务器地址)调用发送请求。

以下是步骤:

  1. 服务器打开一个套接字并将其绑定到IP地址(a.b.c.d)和端口(x)
  2. 客户端打开一个套接字并将其绑定到IP地址(k.l.m.n)和端口(z),并通过sendto调用向服务器发送请求。
  3. 服务器(在不同的进程中)打开一个套接字并将其绑定到IP地址(a.b.c.d)和端口(y)
  4. 服务器使用sendto
  5. 将响应从上面的套接字发送到客户端

    客户端和服务器都知道彼此的IP地址和端口号。

    我注意到,当服务器从其他进程发送响应时,客户端不会收到响应。否则就是这样。

1 个答案:

答案 0 :(得分:1)

这可以做,但有一些重要的警告。

  1. 客户端必须绑定套接字并使用sendto()recvfrom()而不是connect()使用send()和{{1} }}。这允许它从任何地方接收传入的数据包,只要它们被定向到recv()正在读取的IP /端口。

  2. 如果客户端和服务器之间的路径中存在防火墙或NAT,则可能会阻止响应,因为发送IP /端口与客户端最初发送其请求的IP /端口不匹配。