【发布时间】:2010-05-12 03:00:40
【问题描述】:
我正在编写一个并发服务器,它应该有一个通信通道和一个数据通道。
客户端最初连接到通信通道进行身份验证,验证成功后,客户端连接到数据通道访问数据。
我的程序已经在这样做了,而且我正在使用线程。我唯一的问题是,如果我尝试连接另一个客户端,我会收到“无法绑定:地址已在使用”错误。
我是这样的:
A部分
客户端连接到端口 4567(并输入他的登录信息)。产生一个线程来处理客户端(对每个连接的客户端重复)。在创建的线程中,我有一个函数(我们称之为 FUNC_A)检查客户端的登录信息(不用担心检查是如何完成的),如果成功,线程启动数据服务器(监听 8976),然后向客户端发送 OK,一旦收到,客户端就会尝试连接到数据服务器。
第二部分
一旦客户端连接到数据服务器,从 FUNC_A 内部接受客户端并生成另一个线程来处理客户端与数据服务器的连接(希望一切都清楚)。 现在,一切正常。但是,如果我在第二个客户端到达 B 部分时尝试连接它,我会收到“无法绑定错误:地址已在使用中”。我尝试了很多不同的方法,我什至尝试生成一个线程来启动数据服务器并接受客户端,然后启动另一个线程来处理该连接。还是没有运气。
请给我一个建议,告诉我我做错了什么,我该怎么做或者最好的实现方法是什么。 谢谢
【问题讨论】:
标签: c++ sockets concurrency