gpt4 book ai didi

服务器和客户端是否可以在同一个端口上发起通信并发送命令?

转载 作者:可可西里 更新时间:2023-11-01 11:09:51 33 4
gpt4 key购买 nike

我有一个服务器和一个客户端应用程序,我的服务器监听端口 10015 和一个向该端口发送命令的客户端。目前两者都在同一台机器上运行,但 future 的目标是在不同的机器上运行。我现在有这部分工作。

接下来我需要做的是让我的服务器也向我的客户端发送命令。所以我想我可以在我的客户端中重新使用我的服务器代码来监听一个端口。

但我不确定这是最好的方法。建议?

当我第一次尝试这个时,我先运行我的客户端应用程序,然后它向自己发送命令。我的服务器应用程序无法绑定(bind)到端口(我假设您只能让一个进程监听给定端口?)

问题 1)服务器如何向客户端发送命令?我是否必须在端口 10015 上创建服务器--> 客户端通信,并在其他端口(如 10016)上创建客户端---> 服务器?

问题 2)当我使用 send() 从客户端 --> 服务器发送命令时,接收对该特定命令的 ACK 的最佳方式是什么?如果我不需要发回任何数据,有没有办法在服务器收到数据包时自动获得 ACK?

我目前正在为我要发送的每个命令执行此操作:

create socket()
conenct() to socket
send() packet
then call recv() to receive any data
then shutdown() connection
and closesocket() at end

不确定是否有更好的方法?当我的应用程序繁忙时,我希望每秒发送 1-10 条命令。

谢谢,我是这个网络应用程序的新手,所以非常感谢任何帮助。

阅读一些评论后编辑:
我正在使用 TCP 协议(protocol)。当我说 ACK 时,我的意思是我只是想从其他应用程序那里得到一些确认,即命令已被无误地接收和处理

最佳答案

通常的做法如下:

  1. “服务器”将一个套接字绑定(bind)到一个指定的端口——对于您来说,它看起来像是 10015。
  2. “客户”使用 ephemeral port用于传出传输
  3. 如果服务器要响应客户端,它会从它的绑定(bind)端口 (10015) 向消息 #2 的源端口(临时端口)发送一条消息。

在服务器上:

如果您正在使用 UDP,您可以简单地将在 recvfrom() 期间设置的 sockaddr 结构复制到您传递给 sendto() 的 sockaddr 结构中。

如果您使用的是 TCP,accept() 返回的套接字文件描述符可用于 send() 以向客户端发送响应流量。

我最喜欢的 C 套接字引用是免费在线提供的 Beej's Guide to Network Programming .

关于服务器和客户端是否可以在同一个端口上发起通信并发送命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902809/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com