Java基础——网络编程

时间:2022-05-31 20:17:08

网络编程:

 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的查询名