网络编程(二)

一.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客户端和服务器端成功地建立连接,可以开始传输数据了。

3.服务器端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);

4.客户端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);

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

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

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

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

二:UDP(User Datagram Protocol)协议

1.UDP概述:

  UDP即用户数据报协议,它是一种不可靠的,面向非连接的协议。

  面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送,至于对方是否可以收到这些数据内容,UDP协议无法控制,所以说它是一种不可靠的协议。

  UDP协议的主要作用是完成网络数据流和数据报之间的转换--在信息的发送端,UDP协议将网络数据流封装成数据报,然后将数据报发送出去;在信息的接收端,UDP协议将数据报转换成实际数据内容。

2.TCP协议和UDP协议的对比:

  TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大

  UDP协议:不可靠,差错控制开销小,传输大小限制在64KB以下,不需要建立连接,比较高效

3.数据通信

  DatagramSocket:代表UDP协议的Socket,相当于码头,只用于接收和发送数据报

  DatagramPacket:代表数据报,相当于集装箱

  DatagramSocket的3个构造方法:

    DatagramSocket();

    DatagramSocket(int port);

    DatagramSocket(int port , InetAddress laddr);

    创建完DatagramSocket对象后使用如下两个方法接收和发送数据

    receive(DatagramPacket p):  从该DatagramSocket中接收数据

    send(DatagramPacket p):  从该DatagramSocket对象向外发送数据报

    DatagramPacket的构造方法

      接收数据的一端应该使用的: DatagramPacket(byte[] buf , int length)

                    DatagramPacket(byte[] buf , int offset , int length)

      发送数据的一端应该使用的:   DatagramPacket(byte[] buf,int length,InetAddress addr,int port)

            DatagramPacket(byte[] buf , int offset , int length,InetAddress addr,int port)

posted @ 2014-11-22 10:23  zhuxian300c  阅读(154)  评论(0编辑  收藏  举报