java 网络教程

转载自并发编程网 – ifeve.com

Java提供了非常易用的网络API,调用这些API我们可以很方便的通过建立TCP/IP或UDP套接字,在网络之间进行相互通信,其中TCP要比UDP更加常用

 Java TCP网络基础

通常情况下,客户端打开一个连接到服务器端的TCP/IP连接,然后客户端开始与服务器之间通信,当通信结束后客户端关闭连接,过程如下图所示:

 

 

 

 

 

 

 

 

 

 

 

 

  JavaSocket类和ServerSocket

当客户端想要打开一个连接到服务器的TCP/IP连接时,就要使用到Java Socket类。socket类只需要被告知连接的IP地址和TCP端口,其余的都有Java实现。

	public  void scoketTest () throws UnknownHostException, IOException{
		
          //创建Socket Socket so = new Socket("192.168.200.13",80); //Socket发送数据,要通过Socket发送数据,我们需要获取Socket的输出流(OutputStream) OutputStream out= so.getOutputStream(); out.write("nihao".getBytes()); /** * 想要通过网络将数据发送到服务器端,一定不要忘记调用flush()方法。 * 操作系统底层的TCP/IP实现会先将数据放入一个更大的数据缓存块中,而缓存块的大小是与TCP/IP的数据包大小相适应的 * 调用flush()方法只是将数据写入操作系统缓存中,并不保证数据会立即发送 */ out.flush(); out.close(); //Socket读取数据,从Socket中读取数据,我们就需要获取Socket的输入流(InputStream) InputStream in=so.getInputStream(); in.read(); /** * 从Socket的输入流中读取数据并不能读取文件那样,一直调用read()方法直到返回-1为止 * 因为对Socket而言,只有当服务端关闭连接时,Socket的输入流才会返回-1 * 而是事实上服务器并不会不停地关闭连接,假设我们想要通过一个连接发送多个请求,那么在这种情况下关闭连接就显得非常愚蠢。 */ in.close(); //关闭Socket,当使用完Socket后我们必须将Socket关闭,断开与服务器之间的连接。 so.close(); }

假如我们想要打开一个监听服务,来监听客户端连接某些指定TCP端口的连接,那就需要使用Java ServerSocket类。当客户端通过Socket连接服务器端的ServerSocket监听时,服务器端会指定这个连接的一个Socket,此时客户端与服务器端间的通信就变成Socket与Socket之间的通信。

	public void serverSocket () throws IOException{
//创建ServerSocket类来监听9000端口 ServerSocket serverSocket = new ServerSocket(9000); //监听请求的连接,要获取请求的连接需要用ServerSocket.accept()方法。该方法返回一个Socket类,该类具有普通java Socket类的所有特性 Socket so = serverSocket.accept(); //关闭客户端Socket so.close(); //关闭服务端Sockets,要关闭服务的时候需要关掉 ServerSocket连接。 serverSocket.close(); }

 在java.net包中包含两个有趣的类:URL类和URLConnection类。这两个类可以用来创建客户端到web服务器(HTTP服务器)的连接

	public void urlTest() throws IOException {
		
		URL url = new URL("http://www.baidu.com");		
		URLConnection connection =url.openConnection();		
		InputStream in= connection.getInputStream();		
		int data = in.read();		
		while (data!=-1) {
			System.out.println((char)data);
			data = in.read();
		}		
		in.close();
		
		/**
		 * 默认情况下URLConnection发送一个HTTP GET请求到web服务器。
		 * 如果你想发送一个HTTP POST请求,要调用URLConnection.setDoOutput(true)方法
		 * 一旦你调用了setDoOutput(true),你就可以打开URLConnection的OutputStream
		 */
		connection.setDoOutput(true);
		OutputStream out= connection.getOutputStream();
			//TODO
	}

 URL类打开一个本地文件系统文件

	private void urlReadFileTest() throws Exception {
		/**
		 * URL也被叫做统一资源定位符。如果你的代码不关心文件是来自网络还是来自本地文件系统,URL类是另外一种打开文件的方式
		 * 这和通过HTTP访问一个web服务器上的文件的唯一不同处就是URL:"file:/c:/data/test.txt"
		 */
		URL url = new URL("file:/c:/data/test.txt");
		URLConnection urlConnection = url.openConnection();
		InputStream input = urlConnection.getInputStream();
		int data = input.read();
		while(data != -1){
			System.out.print((char) data);
			data = input.read();
		}
		input.close();
	}
posted @ 2017-05-18 15:47  不像程序员  阅读(175)  评论(0编辑  收藏  举报