java多线程socket通信原理是什么?

看到如下代码publicstaticvoidmain(String[]args)throwsIOException{ServerSocketserver=newServe... 看到如下代码
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);

while (true) {
Socket socket = server.accept();
invoke(socket);
}
}

private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
当端口收到请求后,直接以这个监听对象开了一个新线程。求解释?
如果有多个客户同时与服务器通信,服务器程序只监听10000这一个端口,如何靠这个socket对象区分是哪个客户发来的会话?是因为每个socket都有自己的id吗?不懂
展开
 我来答
力波鸿0i
2013-04-10 · TA获得超过1259个赞
知道小有建树答主
回答量:461
采纳率:100%
帮助的人:391万
展开全部
第一,程序是通过分时进行服务的。就是说一个程序监听一个端口,第一秒可以从别的地方来一个包,第二秒可以从另一个地方来一个包。
第二,每个socket都会有包发送来的ip地址和端口号,服务器向这个ip对应机器的端口发送数据以回应对方。
百度网友9b5cd8c3b
2013-04-10 · TA获得超过502个赞
知道答主
回答量:36
采纳率:0%
帮助的人:33.4万
展开全部
简单点说, 每个socket都保有一些信息, 比如他所对应的客户端地址和端口等等, 来唯一确定他所负责的客户端, 所以任何到达10000端口的包都可以有去处: 如果已经有socket和他对应了, 那么交给socket处理, 如果没有, 那么放进请求队列, 等待.accept()方法去抽取他并生成一个socket来和他对应.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shala202020
2015-07-16 · TA获得超过4159个赞
知道小有建树答主
回答量:1410
采纳率:85%
帮助的人:452万
展开全部
当Server每接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。这样就实现了多线程socket通信。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zq3062211015
2013-04-10 · TA获得超过125个赞
知道答主
回答量:80
采纳率:0%
帮助的人:44万
展开全部
socket 需要 把自己的 ip 告诉ServerSocket,就是根据ip来区分的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2013-04-10 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1901万
展开全部
防止阻塞

如果不用线程,你在主线程中侦听端口,
那么你会发现,你如果不连接上的话,就会一直在等待,什么也做不了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式