---------------------- android培训、java培训、期待与您交流! ----------------------
用Java实现计算机网络的底层通信,就 是用Java程序实现网络通信协议所规定的功能和操作。这是Java网络编程技术中的一部分。
基于连接的流式套接字
套接字(Socket)是TCP/IP协议的编程接口,即利用Socket提供的一组API就可以编程实现TCP/IP协议,在Java语言里,这个编程接口就是若干系统预先定义好的类。
InetAddress类
InetAddress类主要用来区分计算机网络中的不同节点,即不同的计算机并对其寻址。
每个InetAddress对象中包含了IP地址、主机名等信息。
InetAddress类的常用方法
static String getLocalHost() 返回本地主机名
static String getByName(String host)
根据主机名host确定主机的IP地址
static String[] getAllByName()
根据主机名host确定主机的所有IP地址
String getHostName() 返回当前IP地址的主机名
String getHostAddress() 返回IP地址字符串
byte[] getAddress() 返回当前对象的IP地址的字节数组
String toString() 转换IP地址为字符串
流式Socket的通信机制
流式Socket所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟连接通道,然后它们通过这条通道传送数据信息进行通信,当通信结束时再将原先所建立的连接拆除。
用Java实现计算机网络的底层通信,就 是用Java程序实现网络通信协议所规定的功能和操作。这是Java网络编程技术中的一部分。
基于连接的流式套接字
套接字(Socket)是TCP/IP协议的编程接口,即利用Socket提供的一组API就可以编程实现TCP/IP协议,在Java语言里,这个编程接口就是若干系统预先定义好的类。
InetAddress类
InetAddress类主要用来区分计算机网络中的不同节点,即不同的计算机并对其寻址。
每个InetAddress对象中包含了IP地址、主机名等信息。
InetAddress类的常用方法
static String getLocalHost() 返回本地主机名
static String getByName(String host)
根据主机名host确定主机的IP地址
static String[] getAllByName()
根据主机名host确定主机的所有IP地址
String getHostName() 返回当前IP地址的主机名
String getHostAddress() 返回IP地址字符串
byte[] getAddress() 返回当前对象的IP地址的字节数组
String toString() 转换IP地址为字符串
流式Socket的通信机制
流式Socket所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟连接通道,然后它们通过这条通道传送数据信息进行通信,当通信结束时再将原先所建立的连接拆除。
适用环境:
所以只适合于集中、连续的通信,例如网上聊天等;而对于一些断续的或实时交互性不强的通信,则可以使用下一小节介绍的无连接的数据报方式。
Socket类和ServerSocket类,是用Java实现流式Socket通信的主要工具。创建一个ServerSocket对象就创建了一个监听服务,创建一个Socket对象就建立了一个Client与Server间的连接。
ServerSocket类
创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务:
ServerSocket MyListener = new ServerSocket ( 8000) ;
为了随时监听可能的Client请求,还应该执行如下的语句:
Socket LinkSocket = MyListener . accept( ) ;
需要结束监听时,只需用如下的语句关闭ServerSocket对象:
MyListener . close( );
Socket类
当Client程序需要从Server端获取信息及其他服务时,应该创建一个Socket对象:
Socket MySocket = new Socket ( “ServerComputerAddress”, 8000) ;
Socket类的两个方法:
getOutputStream( )
getInputStream( )
OutputStream SocketOs = MySocket.
getOutputStream ( );
InputStream SocketIs = MySocket.
getInputStream ( );
SocketOs.write(SocketIs.read( ));
无连接的数据报
数据报是无连接的远程通信服务,数据以独立的包为单位发送,不保证传送顺序和内容的准确性。数据报Socket又称为UDP套接字,它无须建立、拆除连接,直接将信息打包传向指定的目的地,使用起来比流式Socket要简单一些。
Java中用于无连接的数据报通信类有两个:
DatagramPacket类
DatagramSocket类
其中DatagramPacket类用于读取数据等信息,DatagramSocket类用于实现数据报的发送和接收过程。
DatagramPacket类
DatagramPacket类的构造函数有两个:
public DatagramPacket(byte ibuf[], int ilength);
public DatagramPacket(byte ibuf[], int ilength, InetAddress iaddr, int iport);
DatagramSocket类
DatagramSocket类有三个构造函数:
public DatagramSocket( );
public DatagramSocket(int port);
public DatagramSocket(int port, InetAddress localAddr);
receive( )和send( )是DatagramSocket类中数据报套接字用来实现数据报传送和接收的两个重要方法:
public synchronized void receive(DatagramPacket p) throws IOException
public void send(DatagramPacket p) throws IOException
据报的发送过程可简单表述为如下步骤。
(1) 创建DatagramPacket对象
其中包含如下信息:
① 要发送的数据;
② 数据报分组长度;
③ 发送目的地的主机IP地址和目的端口号。
(2) 在指定的或可用的本机端口创DatagramSocket对象。
(3) 调用该DatagramSocket的send( )方法,以DatagramPacket对象为参数发送数据报。
接收到的信息有:
① 收到的数据报文内容;
② 发送端的主机IP地址;
③ 发送端主机的发送端口号