JAVA Socket 底层是怎样基于TCPIP 实现的
首先必须明确:TCP/IP模型中有四层结构: 应用层(Application Layer)、传输层(Transport Layer)、网络层(Internet Layer
)、链路层(LinkLayer)
其中Ip协议(Internet
Protocol)是位于网络层的,TCP协议时位于传输层的。通过Ip协议可以使可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络。Ip协议只保证计算机能够接收和发送分组数据。当计算机要和远程的计算机建立连接时,TCP协议会让他们建立连接:用于发送和接收数据的虚拟电路。
套接字或插座(socket)是一种形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA
有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户端用它初始一次连接。侦听套接字只能接收新的连接请求,不能接收实际的数据包,即ServerSocket不能接收实际的数据包。
套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的服务接口,或者说套接字socket是TCP的应用编程接口API,通过它应用层就可以访问TCP提供的服务。
在JAVA中,我们用 ServerSocket、Socket类创建一个套接字连接,从套接字得到的结果是一个InputStream以及OutputStream对象,以便将连接作为一个IO流对象对待。通过IO流可以从流中读取数据或者写数据到流中,读写IO流会有异常IOException产生。
s
=
new
socket("127001",
8880)
前面那个ip是服务器的地址,只要这个ip写正确了,服务器放在哪里,客户端都能连上去的。
1270。01最简单的解释就是本机地址,你用这个ip,访问的就是你自己。
你可以去服务器上查看一下网络地址,然后把1270。01换成服务器的ip。
其实你搞不清楚的是一个通信机制,或者说通信流程顺序的问题
你仔细分析一下,自然就会明白了
先搞清楚原理,再考虑代码实现
记住几个点
1、首先服务器IP肯定是对客户端公开的
2、服务器怎么知道客户端IP呢?就是客户端登录时,先给服务器IP发登录消息,服务器收到该消息,该消息的来源自然就是客户端IP了
3、双方IP都互相知道了,怎么通信都没问题了吧
0条评论