100个用户并发连接,执行clinetSocket=AcceptSocket()后中,clientSocket是不同的实例吗?
在学习socket编程时的一些疑惑:
(1)有一种常见的用法,(例如常见的DateTime服务器)
它使用以下方法:
while(true)
{
clientSocket = serverSocket.Accept();
....
请问,假设同时有100个并发要求连接,那么clientSocket应该是
100个不同的实例吗?如果是不同的100个,为什么在这个例子中却
将clientSocket 定义在函数的外面(即类属性的申请中),是不
是系统会自动为clientSocket分配一个新的实例,而老的实例因为
已经和某个具体的客户端建立了联系而依旧存在,直到与那个客户
脱离关系后才会被销毁?
还有一种假想的可能是:
100个并发被事先排成队列,一次只能进来一个,处理完一个后才
能进来下一个,在处理第一个的时候,那99个还在外面等着,当
第一个处理完后,函数又回到Accept()处开始取出第二个客户端的
连接开始处理?
但是这种假设也靠不住,因为我在看一个HTTPServer的例子时,在
那个例子中,在Accept()获得clientSocket后,便新建一个线程,
然后在这个线程中进行clientSocket.Receiv(..)
clientSocekt(..)等操作。
这样的用法就更加奇怪了,因为,如果Accept()是队列式的,那么
当新的处理线程建立完毕后,Accept()又可以接收新的连接了,可
是在刚才新建立的线程中有可能还在使用clientSocket,这不就出
现冲突了吗?
如果说是100个实例,也说不通,因为在开新线程时并没有告诉那
个线程应该使用哪一个clientSocket,而是所有的线程都统统使用
在类里面申请的clientScoket。
这个问题困绕我很久了,我不知道该如何去解决它。请大家帮我分
析或理解一下。