如果Socket
代表客户端而ServerSocket
代表服务器端,为什么Socket.read
从服务器端读取数据?我真的很困惑,你能澄清一下吗?
答案 0 :(得分:24)
(我发布这个答案是因为我觉得让逻辑正确是很重要的。)
我建议你看看下面的例子。
http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
不可否认,在进行TCP / IP通信时,仅Socket
类可以提供所有必要信息,仅用于通信。无论是在服务器端还是客户端。
从上面的链接可以看出,服务器端使用以下代码获取自己的Socket
实例。也就是说,另一个套接字是在另一个端口上创建的。
然后,服务器使用此Socket
实例与客户端进行通信。
为了使图片完整,下面的代码段显示了 clien t的Socket
实例。
因此,如果Socket
已经可以完成所有操作,为什么我们仍然需要ServerSocket
?
这是因为通过TCP / IP协议进行通信的工作范例。
当2个程序通过TCP / IP进行通话时,通常会有一个被动监听/等待<IP:port>
,而另一个主动连接到它。
所以你可以看到,在这个非常starting phase
的沟通中,双方的行为非常不同。因此,使用了2个不同的类来反映这种差异。
Socket
类封装了活动方的行为。 (a.k.a.客户)ServerSocket
类封装被动方的行为(a.k.a.服务器) ServerSocket
完成其侦听任务并detected
传入连接后,它会accept()
它并创建一个新的Socket
实例以方便通信。
类似地,在java.nio
包中,您会找到ServerSocketChannel
和SocketChannel
个类。他们仍然表现得像这样:
ServerSocketChannel -------------> SocketChannel
accept()
所以,在某种程度上,我同意@JohnK正如他在评论it's more or less just a 6-letter difference
中指出的那样。
答案 1 :(得分:9)
为什么socket.read从服务器端
读取数据
因为它正在通过网络读取服务器发送的数据,所以它不直接读取服务器文件系统或资源(db,ram或类似的东西)它正在读取已经由ServerSocket处理的数据。
将Socket视为Web浏览器,将ServerSocket视为远程Web服务器。
当您请求图像,页面等时,Web服务器(ServerSocket)将字节写入客户端,客户端又必须读取它们(知道Web服务器发送的是什么?)并通过显示它们来处理它们到最终用户。
与ServerSocket / Socket同样发生但处于较低级别。套接字从ServerSocket读取信息。
有意义吗?
答案 2 :(得分:7)
<强> java.net.ServerSocket中强>
此类实现服务器套接字。服务器套接字等待 请求通过网络进入。它执行一些操作 在该请求上,然后可能将结果返回给请求者。
<强>的java.net.Socket 强>
此类实现客户端套接字(也称为“套接字”)。一个 socket是两台机器之间通信的端点。
答案 3 :(得分:5)
首先,让我们澄清一下IS Socket
的样子:在一般情况下,Socket
是通过:
连接IP和端口的连接,例如:{{1} }。
因此,您决定使用127.0.0.1:8080
创建客户端 - 服务器应用程序。没有什么太复杂的了。以下是关于在Socket
和client
之间建立联系的简短说明:
server
拥有自己的client
并知道Socket
IP地址和端口。对于server
,仅提供server
和端口。在这两种情况下,端口都是0到65535之间的相同数字。因此,我们决定将ServerSocket
与我们的client
相关联:
server
使用我们client
的已知IP和端口创建他的Socket clientSocket
对象。
server
使用server
方法获取了传入连接请求,该方法会生成新的ServerSocket.accept()
对象(仍位于Socket newClientSocket
方(!))。
进一步的数据交换通过server
和clientSocket
个对象(不在newClientSocket
和clientSocket
之间)。
Here几乎是了解基本连接过程的完美图片(请记住,此ServerSocket
上的Socket
对象 - 相同的对象)。
完成这个简单的结构后,您需要在Client
和Client.clientSocket
两侧打开两个流来读取和写入信息。
答案 4 :(得分:1)
ServerSocket又是一个具有服务器端点附加功能的Socket。服务器功能包括监听端口和接受传入连接等...
答案 5 :(得分:1)
答案 6 :(得分:1)
ServerSocket
已创建至bind
端口,listen
来自客户端connect
。因此,服务器只是等待对话,而不是启动对话。
ClientSocket
创建到connect
到listen
服务器。客户端启动连接。
示例:将入站呼叫中心视为示例。这些服务是服务器。他们不会发起呼叫,而是等待来自客户的呼叫。一旦呼叫进入,他们就可以进行双向对话。
答案 7 :(得分:0)
因为它正在读取服务器发送给你的内容。
答案 8 :(得分:0)
Socket
用于客户端,ServerSocket
用于服务器端。