使用Socket实现TCP和UDP网络程序设计

1、传输控制协议(TCP)和用户数据报协议(UDP)

(1)TCP协议是一种以固线连线为基础的协议,它提供两台计算机间可靠的数据传送。TCP可以保证从一端数据送至连接的另一端时,数据能够确实送达,而且抵达的数据的排列顺序和送出时的顺序相同。因此,TCP协议适合可靠性要求比较高的场合。

(2)UDP是无连接通信协议,不保证可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。UDP是以独立发送数据包的方式进行。UDP协议适合于一些对数据准确性要求不高的场合。

2、TCP网络程序设计是指利用Socket类编写通信程序。利用TCP协议进行通信的两个应用程序,一个称之为服务器程序,另一个称之为客户机程序。服务器端与客户端交互的过程为:

(1)服务器程序创建一个ServerSocket(服务器端套接字),调用accept()方法等待客户来连接。

(2)客户端程序创建一个Socket,请求与 建立连接。

(3)服务器接受客户的连接请求,同时创建一个新的Socket与客户建立连接,服务器继续等待新的请求。

3、ServerSocket类和Socket类

(1)ServerSocket用来表示服务器套接字。服务器套接字通过指定的端口来等待连接的套接字,它的主要功能是等待来自网络上的连接“请求”。服务器套接字一次可以与一个套接字连接,如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入队列,然后从中取出一个套接字,与服务器新建的套接字连接起来。若请求连接数大于最大容纳数,则多出的连接请求被拒绝。队列的默认大小是50。

(2)调用ServerSocket类的accept()方法会返回一个和客户端Socket对象相连接的Socket对象,服务器端的Socket对象使用getOutputStream()方法获得的输出流将指向客户端Socket对象使用getInputStream()方法获得的那个输入流;同样,服务器端的Socket对象使用getInputStream()方法获得的输入流将指向客户端Socket对象使用getOutputStream()方法获得的那个输出流。也就是说,当服务器向输出流写入信息时,客户端通过相应的输入流就能读取;反之,同样如此。

(3)客户端向服务器发送信息,服务器读取客户端发送的信息,并将读取的数据写入到输出流中。具体代码如下:

使用Socket实现TCP和UDP网络程序设计

使用Socket实现TCP和UDP网络程序设计

4、DatagramSocket类和DatagramPacket类

(1)DatagramSocket类可以建立UDP程序的套接字,数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。

(2)DatagramPacket类表示数据报包,数据报包用来实现无连接包投递服务。每条报文根据该包中包含的信息,从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达,不对包投递做出保证。

(3)服务器端接收数据,再发送数据,客户端实现发送数据,再接收数据。具体代码如下:

使用Socket实现TCP和UDP网络程序设计

使用Socket实现TCP和UDP网络程序设计

5、InetAddress类提供的getByName()方法,可以将一个域名或IP地址传递给该方法的参数,来获取一个InetAddress对象,该对象含有主机地址的域名和IP地址。获取本地主机名的IP地址的代码如下:

使用Socket实现TCP和UDP网络程序设计