当我们在socket.accept()方法之后创建一个新线程时发生了什么?
我想写一个多客户端套接字系统,通过客户端发送的字符串进行通信,这将根据其内容触发事件。
有很多材料如何做到这一点,但我无法理解它背后的逻辑。
In this example而在这其中enter link description here,有一个,而真正的一段代码,它有两个主要的指令:当我们在socket.accept()方法之后创建一个新线程时发生了什么?
socket.accept();
Thread t = new Thread(runnable);
我不明白这是如何工作:
- 的,而(真)连续通过通过这些指令,但只有在accept()方法单击时才创建一个线程?
- 新线程是否有专用端口?套接字通信不是一对一的吗?
- 软件如何跟踪产生的套接字线程,它确实很重要吗?
- 如何发送回复给刚才给我写的帖子?
也许这是我的谷歌技能的缺乏,但我找不到一个很好的教程来做这个东西:帮助吗?
while(true)不断传递这些指令,但只有在accept()方法单击时才创建一个Thread?
直到有人尝试连接,方法accept()上的执行停止。您可以在我们的IDE上使用调试模式来查看它。
新线程是否有专用端口?套接字通信不是一对一的吗?
不,你有相同的端口
如何在软件跟踪催生插座线程的许多连接,它实际上很重要?
不要理会这个,现在
如何发送到刚刚给我写线程的答复?
当有人试图连接您收到一个对象来响应该用户,查看文档
我已经看到accept()返回一个Socket,就像你说的那样。当我在客户端销毁这个时会发生什么?我的程序是否停止在每个指令上,比如“inputStream.readLine()”?谢谢你的回答,它确实清楚了一些事情! – Vale
•在一段时间(真)在这些指令连续通过,但创建一个线程,只有当接受( )方法点击?
一个新的线程创建监听数据通过Socket进来(见Socket.getInputStream())
•有没有新的线程有一个专门的端口?套接字通信不是一对一的吗?
线程没有端口。但是Socket有一个用于与客户端通信的专用地址
•软件如何跟踪衍生的套接字线程,它确实很重要吗?
这取决于软件。但大多数时候,你会保持连接套接字的记录在某种Collection
- 一个List
也许,或用户ID,如果客户端在登录的插座之间的Map
•如何发送回复到写我的线程?
在简单的意义上说,它是那样简单
ServerSocket ss = ...;
Socket s = ss.accept();
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("Hello World");
你需要确保你的PrintStream不会再拿到垃圾收集,因为这将关闭流/插座
当你说要将它们保存在一个集合中时,你是否必须跟踪与该套接字关联的线程? ServerThread是由用户创建的一个类:'ServerThread st = new ServerThread(s);'所有的线程将具有相同的名称,但是不同的套接字:我该如何选择要回答的问题?或者我怎么知道一旦连接关闭,哪个线程会被杀死?谢谢你的tme – Vale
这不看起来像完整的代码。 'accept()'有一个返回值,并且线程't'没有启动。你确定这是实际运行的代码的正确副本吗? – Arkadiy