网络编程中listen()是否在调用后就一直监听,即使接受了其中一个连接,依然监听其他套接字
答案:2 悬赏:50 手机版
解决时间 2021-01-27 12:31
- 提问者网友:斑駁影
- 2021-01-26 21:14
网络编程中listen()是否在调用后就一直监听,即使接受了其中一个连接,依然监听其他套接字
最佳答案
- 五星知识达人网友:一袍清酒付
- 2021-01-26 22:15
listen函数的第一个参数是SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,那就需要用accept函数去进行检查了,accept函数的第一个参数也是SOCKET类型,跟listen函数是同一个socket句柄,所以一般accept都是放在一个线程中不停的调用,因为你不知道什么时候会有客户连接进行来。追问那为什么书上说aceept()函数返回一个新的套接字来接受数据,原来的套接字继续监听追答书上说的没错,你这样理解吧listen的socket对象你把它理解成火车站,aceept的socket对象你把他理解成你要接的旅客。你要接到旅客,首先你要到火车站去等待(即listen的socket对象),旅客有没有到,你要不停的在出口处查看有没有你等待的旅客(即aceept在检查到新连接产生的socket对象),接到旅客后你想对旅客说我爱你,这时你应该对旅客(aceept在检查到新连接产生的socket对象)说,而不是对火车站(listen的socket对象)说。追问我的表达能力挺差的,其实我追问一下还是想问listen()寿命是多少,就像你的例子你在火车站等旅客,总不能一直等下去(那样主函数怎么结束),没旅客的时候吗?那谁又决定什么时候没旅客,是当对方断开链接决定的吗?那又有疑问了,前一个连接结束了却在listen()处理下一个连接时让其结束吗?归根结底就是listen()的寿命追答listen的寿命就是服务器的寿命,listen的socket销毁(即火车站被销毁),服务器与客户端就完全断开连接(去接旅客的人和乘火车来的人都会无法见面),是否有旅客要靠不停循环的去检测,为了不阻塞主线程,检测的函数 (即accept)要放在线程中。至于accept是怎么检测到连接的,那是tcp/ip协议实现的。
全部回答
- 1楼网友:青尢
- 2021-01-26 23:03
listen通俗理解就是打开端口 让端口一直被打开 然后用accpet去监视。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯