服务器可以从不同的进程和套接字发送响应吗?

标签 c linux sockets networking

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

步骤如下:

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

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

我注意到当服务器发送来自不同进程的响应时,客户端没有收到响应。否则,它会。

最佳答案

这是可以做到的,但有一些重要的注意事项。

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

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

关于服务器可以从不同的进程和套接字发送响应吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823304/

相关文章:

linux - 我的 vps 上的 git 与 CentOS 7.0 权限被拒绝(公钥)。每次都是致命的 : Could not read from remote repository.

python - 操作系统错误 : [Errno 22] Invalid argument in python3 socket

c# - C# 控制台应用程序和浏览器之间的 Web Socket

C++,指向同一位置的两个指针如何保存不同的值

c - 带有比较运算符的 bool 输出

c - 何时使用 strncpy 或 memmove?

当一个参数不变时更改 C 中函数指针的签名

php - 通过 php 在 gammu 中打开设备时出错

linux - 使用 arp 表运行 nmap 扫描

c++ - Windows 8 下未解析的套接字引用