listen()创建了一个套接口是什么意思?

我不太懂。百科上说,socket()函数是创建了一个套接口描述字。然后,我们需要知道三个重要的量:IP,端口号,使用的协议。但是listen()之前这三个量都已经绑定了吧... 我不太懂。百科上说,socket()函数是创建了一个套接口描述字。 然后,我们需要知道三个重要的量:IP ,端口号 ,使用的协议。 但是listen()之前这三个量都已经绑定了吧,Listen()到底还创建了什么?创建了一个套接口? 什么样的口? 展开
 我来答
cooke1234
2013-12-22 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3616万
展开全部
listen用的这个socket,稍微特殊一点,通常它只是做监听用,而不进行数据传输的。
比方说,你在1111端口创建了一个listen用的socketA,然后客户端的socketB向listentA发起连接请求(connect),socketA同意连接(accept)以后,会创建一个socketC(端口随机产生)与socketB进行连接,然后socketB和socketC之间就可以传输数据了;而原来的socketA创建出了socketC以后,继续监听1111端口,等待其他客户端的连接。
更多追问追答
追问
listen()到底是干什么的呢?接收connect信息?

但是从代码上看,这不是accept做的么?因为accept参数里有包含用户的IP和端口等。

我就不明白,listen到底干了什么。百科上说是创建了一个套接口跟日志。日志先不管,我就不明白他哪里来了个套接口?
追答
listen就是监听,在本机的xxxx端口监听来自xxx.xxx.xxx.xxx的连接请求。
accept就是 允许接收,accept成功后会返回一个新的socket,这个新socket不是Listen的socket,是为了收发数据而创建的新的socket。因为listen还要继续,收发数据会堵塞listen的,所以新开一个端口的socket用来收发数据是最合适的(客户端进行connect的时候,是往listen端口进行发出请求的,一旦accept以后,客户端都是和新socket进行收发了)。
listen包含的端口,是指本机的端口号。listen通常情况下不需要包含ip,如果包含了IP,那么这个IP是指允许连接的客户端ip(不是指本机的ip)。
accept内部自动为客户端创建一个socket(为了和listen区分开来)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式