Java基础——网络编程
网络编程:
IP地址:InetAddress
唯一的表示Intenet上的计算机
本地地址(hostAddress):127.0.0.1 主机名(hostName):localhost
端口号:正在计算机上运行的程序
网络套接字:端口号和IP地址的组合
@Test public void test(){ InetAddress add = InetAddress.getByName("www.baidu.com"); System.out.println(add); //获取InetAddress对象所含的域名 System.out.println(add.getHostName()); //获取InetAddress对象所含的IP地址 System.out.println(add.getAddress()); //获取本地的域名和IP地址 InetAddress add1 = InetAddress.getLocalHost(); System.out.println(add1); }
TCP协议:
使用TCP协议前,须先建立TCP连接,形成传输数据通道
传输前,采用“三次握手”方式,是可靠的
TCP协议进行通信的两个应用进程:客户端、服务端
在连接中可进行大数据量的传输
传输完毕,需释放已建立的连接,效率低
UDP协议:
将数据、源、目的封装成数据包,不需要建立连接
每个数据报的大小限制在64K内
因无需连接,故是不可靠的
发送数据结束时无需释放资源,速度快
Socket
利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
通信的两端都要有Socket,是两台机器间通信的端点
网络通信其实就是Socket间的通信。
Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
一般主动发起通信的应用程序属客户端,等待通信请求的为服务端
TCP_IP协议的网络编程
package first; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import org.junit.Test; //客户端给服务端发送文本,服务端将文本转成大写返回给客户端 //为了保证相应的流即socket的关闭,使用try-catch-finally进行操作。将关闭的信息写在finally里 public class TestTCP { @Test public void client() { //1.创建Socket(套接字):根据指定服务端的 IP 地址或端口号构造 Socket 类对象。 //Socket(String host,int port)、或者Socket(InetAddress address,int port) Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090); //2.打开连接到socket的输出流 OutputStream os = socket.getOutputStream(); //3.向服务端发送数据 System.out.println("请输入多个字符"); Scanner scanner = new Scanner(System.in); String str = scanner.next(); os.write(str.getBytes()); //shutdownOutput():显式的告诉服务端,发送完毕 socket.shutdownOutput(); //4.接收来自服务端传回来的数据 InputStream is = socket.getInputStream(); byte[] b = new byte[10]; int len; while((len = is.read(b)) != -1) { String str1 = new String(b, 0, len); System.out.println(str1); } //5. is.close(); scanner.close(); os.close(); socket.close(); } @Test public void server() { //1.创建一个ServerSocket对象,创建一个服务器端套接字(Socket),并绑定到指定端口。用于监听客户端请求 //服务器端必须事先建立一个等待客户请求建立套接字连接的ServerSocket对象 ServerSocket ss = new ServerSocket(9090); //2.调用其accept()方法,返回一个Socket对象,监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象 Socket s = ss.accept(); //3.调用Socket的getInputStream()获取接受来自客户端的发送过来的输入流 InputStream is = s.getInputStream(); //4.对获取的输入流进行操作 byte[] b = new byte[10]; int len; String str = null; while((len = is.read(b)) != -1) { String str1 = new String(b, 0, len); str += str1; } String strUpperCase = str.toUpperCase(); //5.返回给客户端 OutputStream os = s.getOutputStream(); os.write(strUpperCase.getBytes()); //6. os.close(); is.close(); s.close(); ss.close(); } }
UDP_IP协议的网络编程
package first; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import org.junit.Test; public class TestUDP { @Test public void send() { //1.创建DatagramSocket对象 DatagramSocket ds = new DatagramSocket(); byte[] b = "你好,我是要发送的数据".getBytes(); //创建一个数据报:每个数据报不能大于64K,都记录着数据信息,发送端的IP、端口号,以及要发送到的接收端IP、端口号 DatagramPacket pack = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090); ds.send(pack); ds.close(); } @Test public void receive() { DatagramSocket ds = new DatagramSocket(9090); byte[] b = new byte[1024]; DatagramPacket pack = new DatagramPacket(b, 0, b.length); ds.receive(pack); String str = new String(pack.getData(), 0, pack.getLength()); System.out.println(str); ds.close(); } }
UDP网络通信流程:
1.DatagramSocket与DatagramPacket
2.建立发送端,接收端
3.建立数据包
4.调用Socket的发送、接收方法
5.关闭Socket
发送端与接收端是两个独立的运行程序
URL编程
URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。
通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。
java.net中的URL类:
构造器:
public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象。例如:URL url = new URL ("http://www. atguigu.com/");
public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象。例如:URL downloadUrl = new URL(url, “download.html")
public URL(String protocol, String host, String file); 例如:new URL("http", "www.atguigu.com", “download. html");
public URL(String protocol, String host, int port, String file); 例如: URL gamelan = new URL("http", "www.atguigu.com", 80, “download.html");
一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:
public String getProtocol( ) 获取该URL的协议名
public String getHost( ) 获取该URL的主机名
public String getPort( ) 获取该URL的端口号
public String getPath( ) 获取该URL的文件路径
public String getFile( ) 获取该URL的文件名
public String getRef( ) 获取该URL在文件中的相对位置
public String getQuery( ) 获取该URL的查询名