Java Socket和ServerSocket的区别是什么?
如果Java Socket和ServerSocket的区别是什么?,java,sockets,serversocket,Java,Sockets,Serversocket,如果Socket表示客户端,ServerSocket表示服务器端,为什么Socket.read从服务器端读取数据?我真的很困惑,你能给我澄清一下吗?因为它正在读取服务器发送给你的内容。ServerSocket又是一个具有server endpoint附加功能的套接字。服务器功能包括监听端口和接受传入连接等 为什么socket.read从服务器端读取数据 由于它正在读取服务器通过网络发送的数据,因此它没有直接读取服务器文件系统或资源(db、ram或其他类似内容),而是在读取已由ServerSock
Socket
表示客户端,ServerSocket
表示服务器端,为什么Socket.read
从服务器端读取数据?我真的很困惑,你能给我澄清一下吗?因为它正在读取服务器发送给你的内容。ServerSocket又是一个具有server endpoint附加功能的套接字。服务器功能包括监听端口和接受传入连接等
为什么socket.read从服务器端读取数据
由于它正在读取服务器通过网络发送的数据,因此它没有直接读取服务器文件系统或资源(db、ram或其他类似内容),而是在读取已由ServerSocket处理的数据
将套接字视为web浏览器,将ServerSocket视为远程web服务器
当您请求图像、页面等时,Web服务器(ServerSocket)将字节写入客户端,而客户端则必须读取字节(以了解Web服务器正确发送了什么?),并通过向最终用户显示字节来处理字节
同样的情况也发生在ServerSocket/Socket上,但级别较低。套接字从服务器套接字读取信息
这有意义吗?看一看
Socket
用于客户端,ServerSocket
用于服务器端。java.net.ServerSocket
此类实现服务器套接字。服务器套接字等待
通过网络传入的请求。它会根据需要执行一些操作
然后可能会将结果返回给请求者
java.net.Socket
此类实现客户端套接字(也称为“套接字”)。A.
套接字是两台机器之间通信的端点
(我发布这个答案是因为我总觉得正确的逻辑很重要。)
我建议你看看下面的样品
诚然,在执行TCP/IP通信时,Socket
类可以仅为通信目的提供所有必要的信息。无论是在服务器端还是客户端
从上面的链接可以看到,服务器端使用以下代码获取自己的套接字
实例。也就是说,在同一服务器本地端口和客户端端口对上创建另一个套接字
然后,服务器使用这个Socket
实例与客户机对话
为了使图片完整,下面的代码片段显示了client的Socket
实例
那么如果Socket
已经可以完成这一切,为什么我们还需要ServerSocket
?
这是因为TCP/IP协议上的通信工作模式
当两个程序通过TCP/IP进行通话时,通常一个会被动地监听/等待
,另一个会主动地连接到它
因此,您可以看到,在通信的这个开始阶段
,双方的行为非常不同。因此,使用了两个不同的类来反映这种差异。
类封装了活动端的行为。(又称客户)Socket
类封装被动端(又称服务器)的行为ServerSocket
ServerSocket
完成其侦听任务并检测到一个传入连接,它将accept()
它并创建一个新的Socket
实例以方便通信
类似地,在java.nio
包中,您会发现ServerSocketChannel
和SocketChannel
类。然而,他们的行为是这样的:
ServerSocketChannel -------------> SocketChannel
accept()
因此,在某种程度上,我同意@JohnK在评论中指出的观点,这或多或少只是6个字母的差异
首先,让我们澄清一下什么是Socket
看起来像什么:在一种常见情况下,Socket
是通过:
连接IP和端口,例如:127.0.0.1:8080
所以,您决定使用Socket
创建客户机服务器应用程序。没什么太复杂的。下面是有关在客户端
和服务器
之间建立连接的简短说明:
首先,让我们澄清这个事实,我们的客户机
有自己的套接字
,并且知道服务器
IP地址和端口。对于服务器
仅提供了服务器套接字
和端口。在这两种情况下,端口在0和65535之间是相同的数字
因此,我们决定将客户端
连接到服务器
:
client
使用我们的服务器的已知IP和端口创建他的Socket-clientSocket
对象
server
通过他的ServerSocket.accept()
方法获得了传入的连接请求,该方法生成了新的Socket-newClientSocket
对象(仍在服务器端(!))
- 进一步的数据交换通过
clientSocket
和newClientSocket
对象进行(不在clientSocket
和ServerSocket
之间)
对于理解基本连接过程来说,这几乎是一幅完美的图片(请记住,Socket
对象位于Client
上,在这张图片中,是相同的对象)
完成这个简单的结构后,您需要在客户端.clientSocket
和服务器上打开两个流。newClientSocket
侧用于读取和写入信息。服务器套接字
创建为绑定到端口并