100个用户并发连接,执行clinetSocket=AcceptSocket()后中,clientSocket是不同的实例吗?

roseguns 2006-06-24 06:48:03
在学习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。
这个问题困绕我很久了,我不知道该如何去解决它。请大家帮我分

析或理解一下。







...全文
356 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuq 2007-01-09
  • 打赏
  • 举报
回复
每次都是新的实例,应该单独保存下来,处理其发送和接收。
scow 2006-11-27
  • 打赏
  • 举报
回复
想想先
juge001 2006-11-27
  • 打赏
  • 举报
回复
up
roseguns 2006-07-25
  • 打赏
  • 举报
回复
自已顶一下。
z9945 2006-07-13
  • 打赏
  • 举报
回复
解释了半天也没人能说明白到底怎么回事
iscxy 2006-07-08
  • 打赏
  • 举报
回复
假设是对的,结论是错的
你关键要了解.net的引用类型;和了解函数调用堆栈,后者所有语言都一样。才能搞清楚那个clientSocket是那个,不会犯这个错误。
Knight94 2006-06-25
  • 打赏
  • 举报
回复
to 请问,假设同时有100个并发要求连接,那么clientSocket应该是
100个不同的实例吗?如果是不同的100个,为什么在这个例子中却
将clientSocket 定义在函数的外面(即类属性的申请中),是不
是系统会自动为clientSocket分配一个新的实例,而老的实例因为
已经和某个具体的客户端建立了联系而依旧存在,直到与那个客户
脱离关系后才会被销毁?

大致是这样的,一个Accept获得socket实例只是当前捕获到的socket请求,当此请求处理完了,也就结束了。
aSalt 2006-06-24
  • 打赏
  • 举报
回复
up
roseguns 2006-06-24
  • 打赏
  • 举报
回复
谢谢,不过总不能为了吃一个苹果,就必须先了解万有引力定律吧?有没有可以忽略细节的简明的解释呢?因为等我看完这三卷书再来做这个项目恐怕是来不及了。
amandag 2006-06-24
  • 打赏
  • 举报
回复
up
oceanh 2006-06-24
  • 打赏
  • 举报
回复
每一个tcp/ip连接都是一个四元组,只要有一个不同就属于不用的连接
内容是: (server IP地址,server tcp端口,client IP地址,client tcp端口)

server端可以产生进程或者线程来处理新进来的请求
有空看看<tcp/ip详解>卷一二三就明白了

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧