概述
Java是通过使用流模式来实现网络信息交互的,一个接口同时拥有两个流:输入流和输出流。
当一个进程向另一进程发送数据时,只需要将数据写入到相应接口的输出流上,而另一进程在接口的“另一端”从输入流上读取数据。
Java所提供的网络功能按层次及使用方法分为三大类:
URL:通过URL的网络资源表达形式确定数据在网络中的位置,利用URL对象中提供的相关方法,直接读入网络中的数据,或者将本地数据传送倒网络的另一端。
Socket: Socket是指两个程序在网络上的通信连接,这个经常用到的一种方式。
Datagram(数据报):Datagram方式是三种网络功能中最低级的一种,它是一种面向非连接的,以数据报方式工作的通信,使用在网络状况不可靠环境下的数据传输和访问。
URL
程序Example
import java.net.MalformedURLException;
public class UseURL
... {
public static void main( String args[] )
...{
URL url = null;
try
...{
url = new URL("http://www.163.com/fff/java.html");
}
catch( MalformedURLExcetpion e )
...{
System.out.println("MalformedURLException:" + e);
}
System.out.println("The URL is:");
System.out.println(url);
System.out.println("Use toString():" + url.toString());
System.out.println("Protocol is:" + url.getProtocol());
System.out.println("Host is:" + url.getHost());
System.out.println("Port is:" + url.getPort());
System.out.println("File is:" + url.getFile());
}
}
读入URL数据
URL类中定义了openStream()方法,用以读取URL位置的数据,其返回值是一个InputStream数据流。
import java.net.MalformedURLException;
import java.io. * ;
public class ReadFromURL
... {
public static void main( String args[] )
...{
URL root = null;
URL url = null;
String readString;
try
...{
root = new URL("file:///e:/lxt008/javacode/");
url = new URL(root, "ReadFromURL.java");
BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream()));
while((readString = br.readLine()) != null)
...{
System.out.println( readString );
}
System.out.println("*********** end of the file ****************");
br.close();
}
catch( MalformedURLException e )
...{
System.out.println("MalformedURLException:" + e);
}
catch(IOException e)
...{
System.out.println("IOException:" + e);
}
}
}
Socket
Server端口与Client端建立连接的过程
先生成一个ServerSocket实例对象,随时监听Client端的连接请求,当Client端需要连接时,相应地要生成一个Socket实例对象,并发出连接请求,其中host参数指明该主机名,port#参数指明该主机端口号。Server端通过accept()方法接收倒Client端的请求后,开辟一个接口与之进行连接,并生成所需的I/O数据流。Client端和Server端的通信都是通过一对InputStream和OutputStream进行的。通信结束后,两端分别关闭对应的Socket接口。
Server端程序
import java.io. * ;
public class SimpleServer
... {
public static void main( String args[] )
...{
s = new ServerSocket(5432);
System.out.println("Server started! Listener port 5432!!!");
}
catch( IOException e )
...{
e.printStackTrace();
}
while( true )
...{
try
...{
Socket s1 = s.accept();
System.out.println("Client connected!!!!");
OutputStream s1out = s1.getOutputStream();
BufferedOutputStream bw = new BufferedOutputStream(s1out);
ObjectOutputStream oos = new ObjectOutputStream(bw);
oos.writeObject("Hello Net World! "); //返回Client信息
oos.close();
bw.close();
s1.close();
}
catch( IOException e )
...{
e.printStackTrace();
}
}
}
Client端程序
import java.io. * ;
public class SimpleClient
... {
public static void main( String args[] )
...{
try
...{
Socket s1 = new Socket("127.0.0.1", 5432);
InputStream is = s1.getInputStream();
ObjectInputStream ois = new ObjectInputStream( bis );
System.out.println( ois.readObject() );
ois.close();
s1.close();
}
catch( ConnectException connExc )
...{
System.out.println("Could not connect to the server.");
}
}
}