Java网络编程入门学习

1.  基于URL的高层次java网络编程

  应用层的编程。 
  主要用到URL类(定义时需要指定服务器端的协议类型、主机/主机名+端口、文件/CGI服务名)。一般实现方法是:
  通过openStream()可以得到InputStream,即可读取www服务器上的资源;
  通过openConnection()可以得到URLConnection,即产生一个双向连接,以实现同服务器端的CGI程序进行交互。

2.  基于Socket的低层次java网络编程

  Socket—网络上双向通信的一端称为一个Socket,它由一个IP地址和一个端口号唯一确定。(在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的)
  
  在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程(传输层)。有TCP和UDP两种方式:TCP,面向连接,可靠,传输大小无限制,但需要连接建立时间,差错控制开销大;UDP,无连接,不可靠,每个报文限制在64K以下,但不需要建立连接的时间(每个数据报都包含有明确的地址信息),差错控制开销较小(在应用中根据需要进行控制)。实时系统一般采用UDP方式,如网络游戏、视频会议等,而Http、FTP、SMTP等应用则都是基于TCP方式。

  两种方式都可以实现C/S结构的网络应用。
  <1> TCP方式
  主要用到的类有Socket,ServerSocket。一般实现过程是:
  服务器端用一个ServerSocket对象对一个指定的端口进行监听;
  客户端用一个Socket对象向服务器发出连接请求;
  服务器一旦收到某个客户端的请求后就建立起一个连接(同时也会生成一个Socket对象),然后启动一个线程来处理该Socket对象与客户端Socket对象的对话,ServerSocket对象继续监听端口;
  由于是面向连接的,所以可以通过Socket的getOutputStream()和getInputStream()得到输入输出流来对端口实现读写操作,实现在双方进行数据传输;
  对话完毕后,关闭输入输出流、关闭Socket.
  *广播:需要在服务器中保存连接列表,广播时遍历该列表对所有连接逐个发送广播数据。
  *一般在客户端要构造一个线程来一直监听服务器的输出以便接收广播。
  *需要注意的是读写端口操作实际上是对缓冲区进行的,输出时最好紧接着flush。
  <2> UDP方式
  主要用到的类有DatagramSocket(用于通信连接),DatagramPacket(表示一个数据报)。一般实现过程是:
  通信双方均需要定义一个DatagramSocket,其中一开始处于监听一方(一般为服务器)要指定端口;
  在客户端将要传送的数据组织成一个DatagramPacket并在其中指定服务器的地址信息,通过DatagramSocket的send()方法发送出去;
  服务器端使用DatagramSocket的receive()方法监听端口一旦收到就将其放入一个事先定义好的DatagramPacket中,随后可进行处理;
  服务器向客户端发送数据报的情况可由此类推;
  通信完成后要关闭DatagramSocket.
  *广播:UDP广播使用特有的类MulticastSocket实现。在广播接收方定义一个广播地址(D类地址)InetAddress,将DatagramSocket用MulticastSocket代替(其中需指定端口)并使用joinGroup()方法将其绑定到广播地址同时用receive()监听广播;发送广播一方只需将要广播的数据、上述广播地址和端口组织成一个DatagramPacket发送出去即可。MulticastSocket的leaveGroup()可以解除对广播地址的绑定。
  *数据报是及时发出的,而非缓冲方式。

你可能感兴趣的:(11,J2SE)