繁体   English   中英

当在socket.accept()方法之后创建一个新的Thread时,会发生什么情况?

[英]What is happening when we create a new Thread after the socket.accept() method?

我正在尝试编写一个通过客户端发送的字符串进行通信的多客户端套接字系统,该系统将根据事件的内容触发事件。
有关如何执行此操作的材料很多,但我无法掌握其背后的逻辑。
在此示例中在此示例中 输入链接描述 ,有一段真正的代码包含两个主要指令:

socket.accept();
Thread t = new Thread(runnable);

我不明白这是如何工作的:

  • while(true)持续传递这些指令,但是仅当accept()方法单击时才创建线程?
  • 新线程是否具有专用端口? 套接字通信不是一对一的吗?
  • 软件如何跟踪生成的套接字线程,它实际上有关系吗?
  • 我如何发送回复给刚刚写给我的帖子?

也许这是我缺乏Google技能,但是我找不到适合该知识的好教程:帮助吗?

while(true)持续传递这些指令,但是仅当accept()方法单击时才创建线程?

直到有人尝试连接时,才会在方法accept()上停止执行。您可以在我们的IDE上使用调试模式查看此内容。

新线程是否具有专用端口? 套接字通信不是一对一的吗?

不,您在同一端口上有许多连接

软件如何跟踪生成的套接字线程,它实际上有关系吗?

现在就打扰一下

我如何发送回复给刚刚写给我的帖子?

当有人尝试连接时,您收到一个对象来响应此用户,请查看文档

•while(true)连续传递这些指令,但是仅在accept()方法单击时才创建线程吗?

创建一个新的线程来侦听通过Socket传入的数据(请参阅Socket.getInputStream())。

•新线程有专用端口吗? 套接字通信不是一对一的吗?

线程没有端口。 但是套接字具有用于与此客户端进行通信的专用地址

•该软件如何跟踪生成的套接字线程,它实际上有关系吗?

这取决于软件。 但是在大多数情况下,您会在某种Collection保留连接的Socket的记录-可能是一个List ,或者如果客户端正在登录,则在userID和Socket之间建立一个Map

•我如何发送回复给刚刚写给我的帖子?

简单来说,它就像

ServerSocket ss = ...;
Socket s = ss.accept();
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("Hello World");

您需要确保您的PrintStream不会再被垃圾收集,因为这将关闭Stream / Socket

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM