客户端未接受就连接到ServerSocket-为什么? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客户端未接受就连接到ServerSocket-为什么? [重复]相关的知识,希望对你有一定的参考价值。

我希望我的问题的答案能够成为文档的指针。但是,如果合适,我可以发布代码以进行错误查找。

为了简化在家工作,我试图在一台Wintel OS /计算机上模拟将在微控制器中运行的服务器与将在Wintel PC中运行的Java客户端之间的交互。如果仿真足够好,我将不必随身携带微控制器设备,而只是为关系的PC端开发软件。

因此,在单台Wintel计算机(在家中)的单JVM中,我这样做:

  1. 创建了一个绑定到192.168.1.63:3456的新ServerSocket对象(本地地址和本地(众所周知的)端口),将backlog参数设置为0。此对象表示通常在微控制器中的代码。
  2. 创建了一个绑定到192.168.1.63:3456的新(客户端)套接字对象,192.168.1.63:0(远程地址,远程端口,本地地址,本地端口(临时端口的占位符)。该对象代表代码/对象,通常在Wintel计算机中。

我希望上面#2中新套接字的创建会阻塞(不连接),直到调用ServerSocket的accept()方法。相反,套接字创建尝试(以及套接字的隐式连接尝试)立即产生了一个新的(客户端)Socket对象。并且我的(客户端)代码继续执行(接下来的几条指令是.setReuseAddress(true)、. getInputStream()、. getOutputStream()等。)>

我在Java API文档中阅读的所有内容都明确或隐含地说ServerSocket accept()调用是允许Socket完成连接到ServerSocket的过程(实际上是ServerSocket创建的新Socket ...);但是我的套接字在ServerSocket accept()调用之前就开始了。

[有人可以指出我的解释吗(客户端的连接尝试在服务器的accept()之前完成)?

希望这种解释将使我知道如何创建适当的模拟(仅因为客户端和服务器都在同一台计算机中而不需要特殊代码的模拟。)>

PS:以防万一。。。当我看到上面的行为时,运行的代码是单线程的。在任何人指出它必须完全成为多线程之前,它才能完全成功。我知道。无论如何,我都没想到我在上面描述了什么。

我希望我的问题的答案能够成为文档的指针。但是,如果合适,我可以发布代码以进行错误查找。为了简化在家工作,我尝试在一个单一的...

答案

积压参数0

以上是关于客户端未接受就连接到ServerSocket-为什么? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java]Socket和ServerSocket服务器端接受数据

使用ServerSocket创建TCP服务器端

Java 服务器能否在一个端口上同时接受 SSL 和明文连接?

serversocket 类如何在同一个端口上服务多个客户端连接?

如何中断 ServerSocket accept() 方法?

建立TCP连接过程