首页 > 代码库 > 网络编程(二)

网络编程(二)

一.TCP(Transmission Control Protocol 传输控制协议)协议

 1.TCP协议概述:

  TCP是一种可靠的,面向连接的,端对端的网络协议。

  TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。 

  TCP协议使用重发机制-当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体的确认信息,如果没有收到确认信息,则会再次重发刚才发送的信息,因此通过这种重发机制,TCP协议向应用程序提供了可靠的通信连接。

  

2.TCP协议如何建立连接:

  TCP协议通过“三次握手”建立连接,当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认,这种建立连接的方法可以防止产生错误的连接。

   

  "三次握手"过程如下:

  1.客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态

  2.服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态

  3.客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态

  三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

二.服务器端Socket

  Java中接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。方法如下:

  Socket accept():如果收到客户端的连接请求,该方法将返回一个与客户端对应的Socket

  构造方法:ServerSocket ss = new ServerSocket(8000);   //8000为端口号,未指定IP,默认绑定本机IP

  设置超时:

  连接,读取操作超过合理时间后,系统判定为操作失败,主要作用是避免执行网络连接,读取服务器数据的进程一直阻塞。

  setSoTimeout(time);     //time为超时时间

  Socket s = new Socket("127.0.0.1",8000);   

  s.setSoTimeout(10000);

三.客户端Socket

  客户端通常使用Socket来连接到指定服务器,Socket有下面两个构造方法

  Socket(InetAddress/String remoteAddress,int port)   //较为简便,常用

  Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort)

  //这个构造器不仅指定远程主机IP和端口,还指定了本地IP和端口,适用于本机主机有多个IP的情况

  Socket s = new Socket("127.0.0.1",8000);

四.建立连接后的数据通信

  客户端,服务器端产生对应的Socket之后,连接便已建立,程序无须再区分服务器端和客户端,而是通过各自的Socket进行通信,Socket提供了输入流和输出流来发送和接受数据:

  InputStream getInputStream()   返回该Socket对应的输入流,让程序通过该输入流从Socket中取出数据

  OutputStream getOutputStream()   返回该Socket对应的输出流,让程序通过该输出流向Socket输出数据

 

  

  

 

网络编程(二)