相关疑难解决方法(0)

当服务器套接字接受客户端套接字时,究竟发生了什么?

我正在研究套接字编程,而服务器套接字accept()让我感到困惑.我为服务器套接字编写了两个方案accept(),请看一下:

  1. 当服务器套接字执行时accept(),它会创建一个新的(客户端)套接字,该套接字绑定到与端口服务器套接字绑定不同的端口.因此套接字通信是通过新绑定端口完成的,服务器套接字(accept()仅用于)正在等待最初绑定端口上的另一个客户端连接.

我认为这不是很正确的答案,因为(1)端口匹配单个进程和(2)套接字接受是内部进程问题,单个进程可以有多个套接字.所以我根据一些stackoverflow答案做了第二个场景:

  1. 当服务器套接字做accept(),它创建了一个新的(客户端)套接字没有绑定到任何特定的端口,并在客户端与服务器进行通信,它使用的端口被绑定到服务器套接字(谁accept()小号连接)和其客户端套接字来实际的通信是由(sourceIP, sourcePort, destIP, destPort)传输级别的TCP头(?)中的元组解决的(这也是可疑的,因为我认为socket是某种应用程序级对象)

这种情况也提出了一些问题.如果套接字通信仍然使用服务器套接字的端口,即客户端向服务器套接字端口发送一些消息,它是否使用服务器套接字的积压队列?我的意思是,客户端的消息如何区分connect()read() or write()?如何解决服务器中的每个客户端套接字,没有任何端口绑定?

如果我的一个场景是正确的,会回答以下问题吗?或者我可能做了两个错误的场景,所以非常感谢你提供正确的答案,或至少一些相关的文本来研究.

sockets tcp

8
推荐指数
2
解决办法
5294
查看次数

Java Socket和ServerSocket在使用端口上的区别

在服务器端,我们使用

Socket server = serverSocket.accept();
Run Code Online (Sandbox Code Playgroud)

创建一个套接字。创建套接字后,我们可以创建一个新线程来处理该套接字的输入/输出流。因此,如果有进一步的连接请求进来,我们可以返回在同一端口上侦听并创建新套接字。由于我们已经在特定端口创建了 ServerSocket,当然我们不能再次在该端口创建另一个 ServerSocket。

所以根据我的理解,我可以得出结论,在服务器端,我们可以在一个端口下创建多个套接字吗?(类似于 Web 服务器的功能)

实际上我的问题是,在客户端,当我们创建套接字时,我们可以指定要使用的本地端口。在我们在该本地端口成功创建客户端套接字后,我们可以将该端口重用于其他客户端套接字吗?该端口是否永久绑定到套接字直到套接字关闭(或端口关闭)?既然客户端没有“侦听”的概念,那么我们是否可以做与ServerSocket一样的事情(参考ServerSocket可以在一个端口下创建多个套接字)?

我很困惑客户端如何处理端口和套接字,因为我将 ServerSocket 与客户端套接字进行比较。

请指点我正确的方向,我知道我的想法不知何故是错误的。非常感谢。

java sockets port tcp serversocket

5
推荐指数
1
解决办法
3898
查看次数

标签 统计

sockets ×2

tcp ×2

java ×1

port ×1

serversocket ×1