在threads.?

时间:2016-08-14 09:11:26

标签: c# multithreading sockets

我试图建立一个接收套接字连接的服务器,对用户进行身份验证,然后发送"发送"与其匹配的用户类的套接字(使用身份验证中给出的信息),添加到要处理的线程池(该客户端的多个设备中)(交换信息,在其他地方更新内容等)。 )。

我选择这样做是因为我不想24/7向服务器发送请求,只需为每个设备保持一个轻量级线程,并实时与之通信。 / em>的

现在,到目前为止,我所看到的可能是这样的东西是Socket.DuplicateAndClose,但这适用于进程,而不是线程。

所有人都知道有任何方法可以做到这一点,还是应该采取不同的方法? 谢谢。

编辑: 似乎有一些混乱,我的意思是,将它移动到另一个类中的另一个Socket,然后在该类上打开的线程将处理它。如果我接受连接以验证它,那么该套接字就具有该连接,事先我无法通过特定类中的特定套接字接受它,因为我不知道它来自哪里,现在,我有一个线程我无法做任何事情,因为我不能告诉该类使用这个线程,因为如果我在该类的线程中使用它,我使用的下一个套接字接受连接将是同一个类占用的连接。我可以使用一个巨大的数组来存储接受的套接字,并告诉类该套接字号是他们的,但这不仅会受到限制,而且还会受到一堆松散的套接字的影响,这些套接字可以工作但不会优化或组织。

1 个答案:

答案 0 :(得分:1)

对哪些线程访问给定套接字没有限制。

任何线程都可以对任何套接字执行操作(假设线程的进程具有该线程的打开句柄)。

在一个套接字上同时执行相同类型(例如,两次读取)的多个IO操作可能会导致混淆 - 您无法控制哪个将获得下一个数据,然后它可以完成第二个。但是可以使用任何形式的显式或隐式并发控制来避免这种情况。

(这同样适用于其他内核对象,如文件,命名管道,共享内存部分,信号量,......。唯一受限制的是只有持有互斥锁或关键部分的线程才能释放它。)