Microchip
直播中

刁文洁

7年用户 154经验值
私信 关注
[问答]

如何协调TCP/IP服务器以访问多个客户端

我正在运行MPLABX 1.42,和声1.8,并且我使用PIC32 MZ以太网启动器套件。我是TCP/IP堆栈的新手,已经使用HARMony文件夹中的tcp_server示例创建了自己的通用TCP服务器,现在我想做的就是扩展这个示例,让服务器在同一个SAME PORT上同时与多个客户机进行通信。只针对一个客户一次(测试和确认)。我已经查看了伯克利服务器示例,并尝试创建一个行为相同的通用TCP服务器。我的代码是附加的。我的代码打开允许3个TCP连接,但打印您好!在关闭连接之前每次连接两次。我相信有更好的方法来建立数据结构来接受多个客户端连接,但我不知所措。任何方向或帮助将不胜感激。

回帖(6)

王雪

2020-4-27 07:41:36
HI赖安,TCP服务器监听一个端口上的连接。当进行连接时,服务器会分叉一个套接字并返回以侦听另一个连接。然后,套接字处理所有的读/写。这允许多个客户端,并且只使用一个端口。
举报

颜小玲

2020-4-27 07:51:00
感谢答复BILP,TCP函数TCPPIPTCPYServEnter()只返回一次调用的单个处理程序。如果我理解你的意思,我可以在一个端口上打开一个服务器,并且简单地等待传入的消息,而不必多次调用这个函数?那么,在我的代码中,如何确定只有一个句柄才出现新的连接?这整件事对我来说是新的,所以我试着看看是否有什么东西我错过了。
举报

王雪

2020-4-27 08:02:26
对。在早期的UNIX编程中(参见Stevens关于Unix网络编程的书),您将使用select()函数,该函数在监视的套接字之一上有活动时返回。当侦听套接字有数据时,就进行新的连接。当连接的套接字具有数据或需要写入数据时,使用该套接字。史蒂文斯书有一个明确的例子,说明如何使用多个客户端的选择函数。我认为这本书(例如VisualStudio)之后的所有东西都是相同逻辑的变体。我希望这有帮助。
举报

云达贞

2020-4-27 08:13:14
在Oracle API中没有“选择”-这需要在OS下运行。用多个套接字侦听多个TCPPIpTCPIServer()多次。每个套接字将在客户端请求进来时连接。一旦客户端断开,服务器套接字将成为新连接的可用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分