socket

来源:互联网 发布:如何制作mac os启动盘 编辑:程序博客网 时间:2024/06/05 07:37

一、概念

1、socket通常也称作"套接字"。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

2、建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口,对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是socket编程接口;HTTP提供了封装或者显示数据的具体形式;socket提供了网络通信的能力。

在设计模式中,socket其实就是一个门面(Facade)模式,它把复杂的TCP/IP协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。

3、socket用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

4、对于Javasocket编程而言,有两个概念,一个是ServerSocket,一个是socket。服务端和客户端之间通过socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有socket来试图连接它时,它会accept该socket的连接请求,同时在服务端建立一个对应的socket与之进行通信。这样就有两个socket了,客户端和服务端各一个。

5、ServerSocket用于服务器端,socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

6、socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。一个完整的socket有一个本地唯一的socket号,由操作系统分配。

7、socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的socket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。

二、连接过程

1、三个步骤

socket之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

2、socket与ServerSocket的交互


三、socket方法

1、socket方法

getInetAddress():远程服务端的IP地址

getPort():远程服务端的端口

getLocalAddress():本地客户端的IP地址

getLocalPort():本地客户端的端口

getInputStream():获得输入流

getOutStream():获得输出流

2、socket状态

isClosed():连接是否已关闭,若关闭,返回true;否则返回false

isConnect():如果曾经连接过,返回true;否则返回false

isBound():如果Socket已经与本地一个端口绑定,返回true;否则返回false

3、ServerSocket构造函数

ServerSocket()throws IOException

ServerSocket(intport) throws IOException

ServerSocket(intport, int backlog) throws IOException

ServerSocket(intport,int backlog,InetAddress bindAddr) throws IOException

(1)port服务端要监听的端口;backlog客户端连接请求的队列长度;bindAddr服务端绑定IP;

(2)如果端口被占用或者没有权限使用某些端口会抛出BindException错误。如1~1023的端口需要管理员才拥有权限绑定。

(3)如果设置端口为0,则系统会自动为其分配一个端口;

(4)bindAddr用于绑定服务器IP,为什么会有这样的设置呢,譬如有些机器有多个网卡。

(5)ServerSocket一旦绑定了监听端口,就无法更改。ServerSocket()可以实现在绑定端口前设置其他的参数。

四、TCP的三次握手

1、第一次握手:建立连接时,客户端发送SYN包(SYN=j)到服务器,并进入SYN_SEND状态,等待服务器确认。

2、第二次握手:服务器接收SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

3、第三次握手:客户端接收服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态。

4、完成三次握手后,客户端与服务器端开始传输数据。

SYN:同步标志,ACK:确认标志


五、 TCP/IP、socket、HTTP的区别

1、socket

socket是对TCP/IP协议的封装和应用。Socket本身并不是协议,而是一个调用接口。通过socket,才能使用TCP/IP协议。socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

2、TCP/IP

IP协议对应于网络层,TCP协议对应于传输层,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,TCP/IP即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准.

3、HTTP

HTTP协议即超文本传送协议,是Web联网的基础,也是手机联网常用的协议之一。HTTP是应用层协议,主要解决如何包装数据。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
(1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
(2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

4、HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

 


代码: SocketDemo

 

 

 

原创粉丝点击