java网络编程

本文深入介绍了TCP和UDP两种传输层协议,包括它们的特点、工作原理。展示了如何使用Java进行TCP和UDP的Socket编程,包括服务器端和客户端的实现代码。此外,还提及了URL在互联网资源定位中的作用。
摘要由CSDN通过智能技术生成

InetAddress

//获取本机的IP地址信息(主机名/本机IP地址)
InetAddress inetAddress = InetAddress.getLocalHost();
System.out.println("主机名:" + inetAddress.getHostName());
System.out.println("IP地址:" + inetAddress.getHostAddress());
System.out.println("获取百度IP:" + inetAddress.getByName("www.baidu.com"));

传输层协议中有两个非常重要的协议:

  • 传输控制协议TCP
  • 用户数据报协议UDP

TCP协议

  • 使用TCp协议前,须先建立TCP连接,形成传输数据通道
  • 传输前,采用“三次握手”方式,是可靠的
  • TCP协议进行通信的两个应用进程:客户端、服务端
  • 在连接中可进行大数据量的传输
  • 传输完毕,需释放已建立的连接,效率低

Socket

  • 利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
  • 通信的两端都要有Socket,是两台机器间通信的端点。
  • 网络通信其实就是Socket间的通信。
  • Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
  • 一般主动发起通信的应用程序属客户端,等待通信请教的为服务端。
    服务端代码
public class TCPServer {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端开启");
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket socket = serverSocket.accept();
        System.out.println("连接成功");
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        inputStream.read(bytes);
        String str = new String(bytes);
        System.out.println(str);

        String response = "来了";
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(response.getBytes());
        outputStream.close();
        inputStream.close();
    }
}

客户端代码

public class TCPClient {
    public static void main(String[] args) throws IOException {
        System.out.println("客户端开启");
        Socket socket = new Socket("127.0.0.1",8888);
        OutputStream outputStream = socket.getOutputStream();
        String str = "小红在吗";
        outputStream.write(str.getBytes());

        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        inputStream.read(bytes);
        String getstr = new String(bytes);
        System.out.println(getstr);
        inputStream.close();
        outputStream.close();
    }
}

UDP协议

  • 将数据、源、目的封装成数据包,不需要建立连接
  • 每个数据包的大小限制在64K内
  • 因无需连接,故事不可靠的
  • 发送数据结束时无需释放资源,速度快

DatagramSocket

  • 类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。
  • UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送达目的地,也不能确定什么时候可以抵达。
    -DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
  • UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。
    服务端代码
public class UDPServer {
    public static void main(String[] args) throws IOException {
        System.out.println("收货驿站已开门");
        DatagramSocket datagramSocket = new DatagramSocket(8088);
        //接收包裹的仓库
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
        //接收包裹
        datagramSocket.receive(datagramPacket);
        //拆快递
        String str = new String(datagramPacket.getData(),0,datagramPacket.getLength());
        System.out.println(str);
        datagramSocket.close();
    }
}

客户端代码

public class UDPClient {
    public static void main(String[] args) throws IOException {
        System.out.println("发货公司");
        DatagramSocket datagramSocket = new DatagramSocket(8888);
        String str = "我是快递";
        byte[] bytes = str.getBytes();
        //参数相当于,包裹,包裹的重量,收件人地址,收件人手机号
        DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),8088);
        //寄出快递
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }
}

URl编程

URL:统一资源定位符,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的www,ftp站点。浏览器通过解析给定的URl可以在网络上查找相应的文件或其他资源。
URL的基本结构由5部分组成:
传输协议://主机名:端口/文件名
例如:http://localhost:8080/index.jsp

URL url = new URL("https://www.baidu.com/");
System.out.println("协议:" + url.getProtocol());
System.out.println("主机:" + url.getHost());
System.out.println("端口号:" + url.getPort());
System.out.println("路径:" + url.getPath());
System.out.println("文件:" + url.getFile());
System.out.println("参数:" + url.getQuery());

//爬虫技术:第一步拿到网页源码,第二步使用正则表达式匹配
StringBuilder sb = new StringBuilder();
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
byte[] bytes = new byte[1024];
int len = -1;
while ((len = is.read(bytes)) != -1) {
    String str = new String(bytes, 0, len);
    sb.append(str);
}
is.close();
File file = new File("D:test.html");
FileWriter fw = new FileWriter(file);
fw.write(sb.toString());
fw.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷图羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值