java 网络教程
Posted 不像程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 网络教程相关的知识,希望对你有一定的参考价值。
Java提供了非常易用的网络API,调用这些API我们可以很方便的通过建立TCP/IP或UDP套接字,在网络之间进行相互通信,其中TCP要比UDP更加常用
Java TCP网络基础
通常情况下,客户端打开一个连接到服务器端的TCP/IP连接,然后客户端开始与服务器之间通信,当通信结束后客户端关闭连接,过程如下图所示:
Java中Socket类和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();
}
以上是关于java 网络教程的主要内容,如果未能解决你的问题,请参考以下文章