请问 一个端口是属于程序,还是属于一个进程 ,还是属于一个线程

eisldkw 2019-10-18 02:13:41


请问

1、一个端口是属于程序,还是属于一个进程 ,还是属于一个线程?

2、一个socket[]数组,socket[0]用于listen,它用socket[1]-socket[100]接收了100个connection请求,请问这100个 socket 是如何区分开的,是通过哪些信息区别开的。

3、当有这100个socket当中的一个客户端发来数据时,这100个socket名字相同,端口相同,系统怎么知道将发过来的数据传给这100个socket当中的哪个socket

谢谢大家。
...全文
1333 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸣鸣Amadues 2019-10-22
  • 打赏
  • 举报
回复
程序是比较宽泛的概念,一般指一段计算机代码,进程和线程是“运行着的程序”。 至于你说的每个connection是进程还是线程,这个是看HTTP容器是怎么实现的,有的是进程的,有的是线程的,比如Tomcat就是线程的
eisldkw 2019-10-21
  • 打赏
  • 举报
回复 1
引用 1 楼 qybao 的回复:
感觉你对socket的概念有点不太清
1 笼统的来说,属于进程,多个线程可以共用一个socket,程序只是进程执行的代码(指令)
2 怎么区分开的就看你怎么管理,用于listen是服务器类型(serversocket),其接收一个客户端连接就会创建一个socket,你可以把这些socket放到集合去管理
3 服务器端只有一个端口监听,所以不管有多少客户端跟服务器连,服务器只用同一个端口跟客户端通信,每个客户端会自动开启一个端口跟服务器连接,至于你要发给哪个socket,你自己可以指定,或者从集合里遍历全部都发送

举个例子,S是服务器,C是客户端,C跟S连接,S会创建一个socket对象和C通信,对于C来说端口是随机分配的(一旦分配好,也就相当于变成固定了),对于S来说端口是固定的(就是监听端口),S通过固定端口和C的分配好的端口互相发送/接收数据
就好像你用http访问某个网站,不管你的机器用什么端口跟服务器连,都只会连到服务器的80端口,这个80端口可能跟你的机器的XX端口连,也可能跟另外某个人的YY端口连


非常感谢。
qybao 2019-10-21
  • 打赏
  • 举报
回复
引用 3 楼 weixin_43869905 的回复:
就好像你用http访问某个网站,不管你的机器用什么端口跟服务器连,都只会连到服务器的80端口?这是啥意思,端口不是你在访问路径上指定的吗?

80端口是服务器的端口,本地端口是随机的,你可以访问某个网站,然后用netstat查看端口就知道
你指定的80端口只是表示你要连接的目标机器的端口(也就是对方机器的端口),并不是你本地使用的端口
weixin_43869905 2019-10-21
  • 打赏
  • 举报
回复
引用 1 楼 eisldkw 的回复:
[quote=引用 1 楼 qybao 的回复:]
感觉你对socket的概念有点不太清
1 笼统的来说,属于进程,多个线程可以共用一个socket,程序只是进程执行的代码(指令)
2 怎么区分开的就看你怎么管理,用于listen是服务器类型(serversocket),其接收一个客户端连接就会创建一个socket,你可以把这些socket放到集合去管理
3 服务器端只有一个端口监听,所以不管有多少客户端跟服务器连,服务器只用同一个端口跟客户端通信,每个客户端会自动开启一个端口跟服务器连接,至于你要发给哪个socket,你自己可以指定,或者从集合里遍历全部都发送

举个例子,S是服务器,C是客户端,C跟S连接,S会创建一个socket对象和C通信,对于C来说端口是随机分配的(一旦分配好,也就相当于变成固定了),对于S来说端口是固定的(就是监听端口),S通过固定端口和C的分配好的端口互相发送/接收数据
就好像你用http访问某个网站,不管你的机器用什么端口跟服务器连,都只会连到服务器的80端口,这个80端口可能跟你的机器的XX端口连,也可能跟另外某个人的YY端口连


非常感谢。
[/quote]
就好像你用http访问某个网站,不管你的机器用什么端口跟服务器连,都只会连到服务器的80端口?这是啥意思,端口不是你在访问路径上指定的吗?
qybao 2019-10-18
  • 打赏
  • 举报
回复
感觉你对socket的概念有点不太清
1 笼统的来说,属于进程,多个线程可以共用一个socket,程序只是进程执行的代码(指令)
2 怎么区分开的就看你怎么管理,用于listen是服务器类型(serversocket),其接收一个客户端连接就会创建一个socket,你可以把这些socket放到集合去管理
3 服务器端只有一个端口监听,所以不管有多少客户端跟服务器连,服务器只用同一个端口跟客户端通信,每个客户端会自动开启一个端口跟服务器连接,至于你要发给哪个socket,你自己可以指定,或者从集合里遍历全部都发送

举个例子,S是服务器,C是客户端,C跟S连接,S会创建一个socket对象和C通信,对于C来说端口是随机分配的(一旦分配好,也就相当于变成固定了),对于S来说端口是固定的(就是监听端口),S通过固定端口和C的分配好的端口互相发送/接收数据
就好像你用http访问某个网站,不管你的机器用什么端口跟服务器连,都只会连到服务器的80端口,这个80端口可能跟你的机器的XX端口连,也可能跟另外某个人的YY端口连

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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