【发布时间】:2011-05-05 19:02:11
【问题描述】:
我有一个服务器和一个客户端应用程序,我的服务器侦听端口 10015 和一个向该端口发送命令的客户端。目前两者都在同一台机器上运行,但未来的目标将是在不同的机器上运行。我现在有这部分工作。
接下来我需要做的是让我的服务器也向我的客户端发送命令。所以我想我可以在我的客户端重新使用我的服务器上的代码来监听端口。
但我不确定这是最好的方法。建议?
当我第一次尝试这个时,我首先运行了我的客户端应用程序,然后它把命令发送给了自己。我的服务器应用未能绑定到端口(我假设您只能让一个进程监听给定端口?)
问题 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 个命令。
谢谢,我是这个网络应用程序的新手,因此非常感谢任何帮助。
阅读一些 cmets 后编辑:
我正在使用 TCP 协议。当我说 ACK 时,我的意思是我只是想从其他应用程序中确认命令已被接收并正确处理
【问题讨论】:
-
是的,只有一个进程可以同时绑定和监听一个TCP地址+端口。所以你有两个程序想要交换数据?除非我错过了什么,否则您可以使用一个套接字并双向发送数据。
-
你能说明你有什么协议吗?如果这确实是 TCP,那么您无需发送和接收 ACK 消息。
-
你不需要关闭连接,如果你打开一个 TCP/IP 网络套接字然后让它保持打开状态。服务器和客户端可以来回发送彼此的消息。你提到ACK,你会写HL7接口吗?
-
我正在使用 TCP 协议。当我说 ACK 时,我的意思是我只是想从另一个应用程序中确认命令已被接收并正确处理。
标签: c windows networking client-server